我正在寻找一个类似的as_completed
函数(来自 Python 3concurrent.futures
) 在 Python 2.7 模块中multiprocessing
。我当前的解决方案:
import time
from multiprocessing import Pool
def f(x):
time.sleep(x)
return x
if __name__ == '__main__':
pool = Pool()
a = pool.apply_async(f, [4])
b = pool.apply_async(f, [2])
while any([a,b]):
if a and a.ready(): print a.get(); a=False
if b and b.ready(): print b.get(); b=False
一种快速但肮脏的方法是将异步结果对象存储在可迭代中并定期轮询其状态。
from multiprocessing import Pool
from random import random
from time import sleep
def wrapped_sleep(n, i):
sleep(n)
return n, i
if __name__ == '__main__':
pool = Pool()
random_sleep_durations = [random() * 10 for _ in xrange(100)]
results = [
pool.apply_async(wrapped_sleep, (n, i, ))
for i, n in enumerate(random_sleep_durations)
]
while results:
sleep(0.1)
mature_indices = []
mature_results = []
for i, candidate in enumerate(results):
if candidate.ready():
mature_indices.append(i)
break
for i in mature_indices:
mature_results.append(results.pop(i).get())
for result in mature_results:
print result
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)