我需要并行化一个涉及到特定“yield”的函数。这只是我要处理的整个程序的简单副本,但总结了我所面临的问题。在这里,我正在尝试理解多进程、apply_async和yield对我的项目的作用。
在这个示例中,我使用了multiprocessing.pool,并使用apply_async进行并行化。我在“parallel”函数中放置了一些打印语句,但它们没有被打印出来。
当我将yield替换为return时,打印语句得以反映。我不确定yield的性质。我知道它是一个生成器,只能在返回后使用一次。请指导如何使其正常工作。
import multiprocessing as mp
results=[]
def parallel(x, y, z):
print "aim in parallel"
count=0
result=[]
for line in range(10000):
count+=1
result.append(count)
p=x**3+y+z
print " result"
print result
print p
if p > 0:
return result
# yield result, p
# count += 1
# yield p, result
# count += 1
def collect_results(result):
print "aim in callback"
results.append(result)
#print results
def apply_async_with_callback():
pool = mp.Pool(processes=10)
r = range(10)
[pool.apply_async(parallel, args=(2,5, 7),callback=collect_results) for i in r ]
pool.close()
pool.join()
print "length"
print len(results)
print results
if __name__ == "__main__":
apply_async_with_callback()