Python의 다중 프로세스 구현에 대한 자세한 설명(예제 포함)

不言
풀어 주다: 2018-10-20 14:56:09
앞으로
4400명이 탐색했습니다.

이 기사는 Python의 다중 프로세스 구현에 대한 자세한 설명을 제공합니다(예제 포함). 도움이 필요한 친구들이 참고할 수 있기를 바랍니다.

fork 함수는 자식 프로세스를 생성합니다

기본 사용법

Linux 운영 체제는 자식 프로세스를 생성하는 포크 ​​함수를 제공합니다. fork()는 Python의 os 모듈에 있습니다.
가져온 OS 모듈을 사용하세요.

import os
os.fork()
로그인 후 복사

fork() 함수가 호출될 때마다 해당 상위 프로세스는 하위 프로세스를 생성합니다.
예를 들어 다음 코드는

import os
os.fork()
os.fork()
os.fork()
로그인 후 복사

실행 후 8개의 프로세스가 생성됩니다.

fork() 함수

fork() 함수의 반환 값은 자식 프로세스에 대해 항상 0인 반면, 부모 프로세스에 대한 반환 값은 자식 프로세스의 pid(프로세스 번호)입니다.

#!/usr/bin/env python
import os
import time

rt = os.fork()

if rt == 0:
    print(f"The child process is {os.getpid()} . His father is {os.getppid()}")  # os.getpid()获取当前进程进程号,os.getppid()获取当前进程的父进程号
    time.sleep(5)
else:
    print(f"The father process is {os.getpid()} . His father is {os.getppid()}")
    time.sleep(5)

print(f"Now the process is {os.getpid()} . His father is {os.getppid()}")
로그인 후 복사

실행 결과:

Python의 다중 프로세스 구현에 대한 자세한 설명(예제 포함)

프로세스 모듈

가져오기 모듈

Python은 또한 전체 플랫폼에 멀티 스레드 프로그래밍을 제공하는 멀티프로세싱 라이브러리를 제공합니다.

import multiprocessing
로그인 후 복사

간단한 프로세스

다음 코드는 간단한 프로세스입니다.

from multiprocessing import Process


def work(num):
    for i in range(10):
        num += 1
    print(num)
    return 0


def main():
    num = 1
    p1 = Process(target = work, args = (num,))
    p1.start()


if __name__ == '__main__':
    main()
로그인 후 복사

Python의 다중 프로세스 구현에 대한 자세한 설명(예제 포함)

여기서 Process 클래스는 다중 처리 라이브러리에서 도입되었습니다.
p1 = Process(target = work, args = (num,))는 프로세스를 생성합니다. 타겟은 작업을 수행하는 함수이고, args는 수신된 매개변수로서 튜플 형태로 제공되어야 합니다.
start()는 프로세스를 시작하는 것입니다.
동시 프로세스에는 몇 가지 방법이 있습니다.

조인 방법

프로세스의 조인 방법은 멀티스레딩과 유사합니다. 프로세스가 끝나기를 기다리고 있습니다.
사용법: 가입(시간 초과).
join()을 사용하면 프로그램은 다음 코드를 계속하기 전에 프로세스가 끝날 때까지 기다립니다.
시간 초과 매개변수가 추가되면 프로그램은 다음 프로그램을 계속 실행하기 전에 시간 초과 초 동안 대기합니다.

close 메서드

close()는 프로세스를 닫는 데 사용되지만 실행 중인 하위 프로세스는 닫을 수 없습니다.

Process 클래스

클래스를 생성하여 여러 프로세스를 구현할 수 있습니다.

from multiprocessing import Process
import time


class My_Process(Process):

    def __init__(self,num):
        Process.__init__(self)
        self.num = num

    def run(self):
        time.sleep(2)
        print(self.num)


def main():
    for i in range(10):
        p = My_Process(i)
        p.start()


if __name__ == '__main__':
    main()
로그인 후 복사

Process pool

from multiprocessing import Pool
import time


def target(num):
    time.sleep(2)
    print(num)


def main():
    pool = Pool(3)
    for i in range(3):
        pool.apply_async(target,(i,))
    pool.close()
    pool.join()
    print('Finish!!!')


if __name__ == '__main__':
    main()
로그인 후 복사

Pool 개체에서 Join() 메서드를 호출하면 모든 하위 프로세스가 실행을 완료할 때까지 대기하며, 반드시 Join() 전에 호출되어야 합니다. close()를 호출한 후에는 계속해서 새 프로세스를 추가할 수 없습니다.
Pool의 num(num)은 추가될 프로세스의 개수입니다. 프로세스 수가 지정되지 않으면 기본값은 CPU 코어 수입니다.

프로세스는 서로 독립적입니다.

여러 프로세스의 각 프로세스에는 변수 복사본이 있으며 프로세스 간의 작업은 서로 영향을 미치지 않습니다.

import multiprocessing
import time

zero = 0

def change_zero():
    global zero
    for i in range(3):
        zero = zero + 1
        print(multiprocessing.current_process().name, zero)

if __name__ == '__main__':
    p1 = multiprocessing.Process(target = change_zero)
    p2 = multiprocessing.Process(target = change_zero)
    p1.start()
    p2.start()
    p1.join()
    p2.join()
    print(zero)
로그인 후 복사

최종 실행 결과:

Python의 다중 프로세스 구현에 대한 자세한 설명(예제 포함)

파일 IO 작업이 수행되면 여러 프로세스가 동일한 파일에 씁니다.

Queue

다중 처리에서 Queue를 사용하면 서로 다른 프로세스가 동일한 리소스에 액세스할 수 있습니다.

rreee

위 내용은 Python의 다중 프로세스 구현에 대한 자세한 설명(예제 포함)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:segmentfault.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!