수색…


두 가지 간단한 프로세스 실행하기

여러 프로세스를 사용하는 간단한 예는 별도로 실행되는 두 프로세스 (작업자)입니다. 다음 예제에서는 두 개의 프로세스가 시작됩니다.

  • countUp() 는 매초마다 1을 카운트합니다.
  • countDown() 은 1 초마다 1을 카운트합니다.
import multiprocessing
import time
from random import randint

def countUp():
    i = 0
    while i <= 3:
        print('Up:\t{}'.format(i))
        time.sleep(randint(1, 3)) # sleep 1, 2 or 3 seconds
        i += 1

def countDown():
    i = 3
    while i >= 0:
        print('Down:\t{}'.format(i))
        time.sleep(randint(1, 3)) # sleep 1, 2 or 3 seconds
        i -= 1

if __name__ == '__main__':
    # Initiate the workers.
    workerUp = multiprocessing.Process(target=countUp)
    workerDown = multiprocessing.Process(target=countDown)
    
    # Start the workers.
    workerUp.start()
    workerDown.start()

    # Join the workers. This will block in the main (parent) process
    # until the workers are complete.
    workerUp.join()
    workerDown.join()

출력은 다음과 같습니다.

Up:    0
Down:    3
Up:    1
Up:    2
Down:    2
Up:    3
Down:    1
Down:    0

풀 및 맵 사용

from multiprocessing import Pool

def cube(x):
    return x ** 3

if __name__ == "__main__":
    pool = Pool(5)
    result = pool.map(cube, [0, 1, 2, 3])

Pool 은 배후의 여러 Workers (프로세스)를 관리하는 클래스이며, 프로그래머가 사용할 수있게 해줍니다.

Pool(5) 은 5 개의 프로세스가있는 새로운 Pool을 생성하고 pool.mapmap 처럼 작동하지만 다중 프로세스 (풀 생성시 정의 된 양)를 사용합니다.

문서 에서 찾을 수있는 map_async , applyapply_async 를 사용하면 비슷한 결과를 얻을 수 있습니다.



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow