当一个函数包含yield
调用语句时,它实际上并不运行代码,而是返回一个生成器:
>>> p = parallel(1, 2, 3)
>>> p
<generator object parallel at 0x7fde9c1daf00>
然后,当需要下一个值时,代码将运行直到产生一个值:
>>> next(p)
([10000], 6)
>>> next(p)
(6, [10000])
就你而言,results
包含 10 个异步创建的生成器,但它们从未实际运行过。
如果您想使用生成器,您可以稍微更改代码以定位从生成器创建列表的函数:
def parallel2(x, y, z):
return list(parallel(x, y, z))
def collect_results(lst):
results.extend(lst)
def apply_async_with_callback():
pool = mp.Pool()
for _ in range(10):
pool.apply_async(parallel2, args=(2, 5, 7),
callback=collect_results)