다른 함수를 병렬로 실행하고 (foo, bar 및 baz) 각 함수가 반환 한 값을 순서대로 반환하고 싶습니다. 라는.다른 함수를 병렬로 실행하고 반환 된 값을 특정 순서로 가져옵니다.
나는 아래 코드와 같은 것을 시도했지만, 어떤 이유로는 Windows에서 영원히 반복됩니다. 예를 들어 multiprocessing
을 사용하여이를 달성 할 수 있습니까? 함수는 동일한 매개 변수 (즉, 데이터)를 취할 것으로 예상됩니다.
참고 : 아래 코드는 Python 3 용이므로 Python 2.7에 해당하는 기능을 사용하고 싶습니다.
from concurrent.futures import ProcessPoolExecutor
from operator import itemgetter
def foo(data):
return "foo"
def bar(data):
return "bar"
def baz(data):
return "baz"
work = [foo, bar, baz]
data = [1,2,3,4,5]
results = []
with ProcessPoolExecutor(max_workers=4) as pool:
for i, work_item in enumerate(work):
future = pool.submit(work_item, data)
def callback(ret):
results.append((i, ret.result()))
future.add_done_callback(callback)
results.sort(key=itemgetter(0))
print(results)
내가 주어진 코드를 파이썬 3 것을 언급하는 것을 잊었다 (그리고 Windows에서는 작동하지 않습니다). 그러나 Python 2.7에서 작동하는 코드를 사용해야합니다. – eLearner
다음 페이지에서 살펴보십시오. https://pymotw.com/2/multiprocessing/communication.html – Muatik
파이썬 2.7의 답변을 업데이트했습니다. – Muatik