복붙노트

[PYTHON] 여러 프로세스간에 결과 큐 공유

PYTHON

여러 프로세스간에 결과 큐 공유

다중 처리 모듈의 문서는 다중 처리로 시작된 프로세스에 대기열을 전달하는 방법을 보여줍니다. 프로세스. 하지만 apply_async로 시작된 비동기 작업자 프로세스로 큐를 공유하려면 어떻게해야합니까? 역동적 인 합류 나 다른 어떤 것도 필요로하지 않습니다. 노동자들이 (반복적으로) 결과를 다시 기본으로보고 할 수있는 유일한 방법입니다.

import multiprocessing
def worker(name, que):
    que.put("%d is done" % name)

if __name__ == '__main__':
    pool = multiprocessing.Pool(processes=3)
    q = multiprocessing.Queue()
    workers = pool.apply_async(worker, (33, q))

이것은 다음과 함께 실패합니다.     RuntimeError : 큐 객체는 상속을 통해 프로세스간에 공유되어야합니다. 이것이 의미하는 바를 이해하고 피클 링 / unpickling (및 모든 특수 Windows 제한 사항)이 필요하기보다는 상속하는 조언을 이해합니다. 하지만 작동 방식으로 큐를 전달하는 방법은 무엇입니까? 예를 찾을 수 없으며 다양한 방법으로 실패한 몇 가지 대안을 시도했습니다. 도와주세요?

해결법

  1. ==============================

    1.다중 처리 .Manager를 사용하여 대기열을 관리하고 다른 작업자가 대기열에 액세스 할 수 있도록하십시오.

    다중 처리 .Manager를 사용하여 대기열을 관리하고 다른 작업자가 대기열에 액세스 할 수 있도록하십시오.

    import multiprocessing
    def worker(name, que):
        que.put("%d is done" % name)
    
    if __name__ == '__main__':
        pool = multiprocessing.Pool(processes=3)
        m = multiprocessing.Manager()
        q = m.Queue()
        workers = pool.apply_async(worker, (33, q))
    
  2. from https://stackoverflow.com/questions/9908781/sharing-a-result-queue-among-several-processes by cc-by-sa and MIT license