파이썬에서 멀티 프로세싱으로 생산자-소비자 문제 구현

파이썬에서 멀티 프로세싱을 구현해보았습니다.

생산자 함수와 소비자 함수는 각각 별도의 프로세스에서 실행되며,
메인 프로세스는 일정 시간이 지난 후 각 프로세스를 종료 시킵니다.
파이썬에서 특이한 것은 Queue, Event 등의 객체가 각 프로세스 간에 동기화 된다는 것입니다. 마치 스레드처럼요.
일반적인 객체(변수)는 Process의 args 파라미터에 넣어도 프로세스 간에 동기화되지 않으므로 주의하시기 바랍니다.
from multiprocessing import Process, Queue, Event
import time

def produce(q, e):
    counter = 1
    while e.is_set():
        item = 'item {0:0>4}'.format(counter)
        print('{} produce: {}'.format(time.time(), item))
        q.put(item)
       
        counter += 1
        time.sleep(0.2)
    print('produce func finish')

def consume(q, e):
    while e.is_set():
        val = q.get()
        print('{} consume: {}'.format(time.time(), val))
        time.sleep(0.7)
    print('consume func finish')

if __name__ == '__main__':
    q = Queue()
    e = Event()
    e.set()
    p1 = Process(target=produce, args=(q, e))
    p2 = Process(target=consume, args=(q, e))
   
    p1.start()
    p2.start()
   
    print('now main process go to sleep.')
    time.sleep(10)
    print('main process wake up!')
    e.clear()
    print('work flag clear!')
   
    p1.join()
    p2.join()
   
    print('Done!')

참고 자료:

댓글

이 블로그의 인기 게시물

프로세스 강제 종료 불가 시.

Visual Studio 디버깅 시 멈춰있는 문제