내 프로젝트에서 멀티 프로세싱을 사용하고 있습니다. 결과를 대기열에 넣는 작업자 함수가 있습니다. 모든 것이 잘 작동합니다. 그러나 x의 크기가 커지면 (내 경우 x는 배열이다.) 뭔가 잘못되었다.파이썬에서 다중 처리가 차단되었습니다.
def do_work(queue, x):
result = heavy_computation_function(x)
queue.put(result) # PROBLEM HERE
def parallel_something():
queue = Queue()
procs = [Process(target=do_work, args=i) for i in xrange(20)]
for p in procs: p.start()
for p in procs: p.join()
results = []
while not queue.empty():
results.append(queue.get)
return results
내가 파이썬 프로세스가 작동,하지만 뭔가 일이 모든 프로세스가 실행하지만 아무것도하지 않고있다 모니터링 시스템에서 볼 : 여기 내 코드의 단순화 된 버전입니다. 이것은 ctrl-D를 입력 할 때 얻는 것입니다.
pid, sts = os.waitpid(self.pid, flag)
KeyboardInterrupt
몇 가지 테스트를 수행합니다. 문제는 큐에 결과를 넣는 것과 같아요. 결과를 넣지 않으면 효과가 있지만 아무런 목적도 없습니다.
대기열 개체를 새 프로세스로 전달하지 않는 것처럼 보입니다. 또한'Process'의'args'는'튜플 (tuple) '이어야합니다. 'args = (queue, i)'로 변경해보십시오. 'queue.get'는 괄호가 필요하기 때문에'queue.get()'이됩니다. – Wessie