Programming/Python

python queue를 이용한 multiprocessing 기초

파이몬 2017. 12. 19. 17:57

python queue를 이용한 multiprocessing 기초 뼈대


import multiprocessing

#동작 실행 함수
def do_work(item):
    print item

#Queue 전달 함수
def worker(q):
    for item in iter(q.get, None):
        do_work(item)
        q.task_done()
    q.task_done()

#메인 함수
def main():

    #동작 프로세스 개수
    num_procs = 5

    #큐 데이터
    items = [1,2,3,4,5,6,7,8,9,10]

    q = multiprocessing.JoinableQueue()

    procs = []

    for i in range(num_procs):
        procs.append(multiprocessing.Process(target=worker, args=(q,) ))
        procs[-1].daemon = True
        procs[-1].start()

    for item in items:
        q.put(item)
    q.join()

    for p in procs:
        q.put(None)
    q.join()

    for p in procs:
        p.join()

    q.__init__()
    print "Finished everything...."
    print "num active children:", multiprocessing.active_children()

if __name__ == '__main__':
    main()


Queue 데이터와 do_work의 동작 함수를 적절하게 수정하면 여러 방면으로 활용 가능

multi thread 방식보다 multi process 방식이 빠르다