multiprocessing
모듈을 사용하여 멀티 스레드 방식으로 일부 메소드를 실행해야하는 클래스를 현재 작성 중입니다. n
의 Pool
을 사용하여 실제 계산을 실행합니다. 이제 다른 계산을 위해 현재 n
활성 근로자 각각에게 0
과 n
사이의 색인을 할당하려고했습니다. 이렇게하려면 인덱스를 할당하기 위해 공유 된 Queue
을 사용하고 싶었습니다. 즉, 두 명의 작업자가 동일한 ID를 가질 때마다 인덱스를 할당했습니다. 서로 다른 스레드간에 클래스 내에서 동일한 Queue
을 공유하려면 Manager.Namespace()
안에 저장하고 싶습니다. 하지만 이렇게하면 Queue
에 몇 가지 문제가 있습니다. 따라서, 나는 내 문제의 최소 버전을 생성하고이 같은 뭔가 결국 :Manger.Namespace() 내의 다중 처리 대기열
from multiprocess import Process, Queue, Manager, Pool, cpu_count
class A(object):
def __init__(self):
manager = Manager()
self.ns = manager.Namespace()
self.ns.q = manager.Queue()
def foo(self):
for i in range(10):
print(i)
self.ns.q.put(i)
print(self.ns.q.get())
print(self.ns.q.qsize())
a = A()
a.foo()
이 코드에서, 실행은 두 번째 인쇄 문 앞에 정지 - 그러므로, 나는 데이터가 실제로 작성되지 않는다는 생각 Queue
. namespace
관련 항목을 제거하면 코드가 완벽하게 작동합니다. 이것은 multiprocessing
객체의 의도 된 동작입니까? 제가 잘못하고 있습니까? 아니면 어떤 종류의 버그입니까?