Python starmap_async在星图工作的地方不起作用?



这个starmap示例程序按预期工作:

import multiprocessing
def main():
pool = multiprocessing.Pool(10)
params = [ (2, 2), (4, 4), (6, 6) ]
pool.starmap(printSum, params)
# end function
def printSum(num1, num2):
print('in printSum')
mySum = num1 + num2
print('num1 = ' + str(num1) + ', num2 = ' + str(num2) + ', sum = ' + str(mySum))
# end function
if __name__ == '__main__':
main()

输出:

in printSum
num1 = 2, num2 = 2, sum = 4
in printSum
num1 = 4, num2 = 4, sum = 8
in printSum
num1 = 6, num2 = 6, sum = 12

但是如果我像这样将starmap行更改为starmap_async

pool.starmap_async(printSum, params)

并保持其他所有内容相同,我根本没有输出?!? 从阅读文档 https://docs.python.org/3/library/multiprocessing.html#multiprocessing.pool.Pool.map_async 我无法确定原因。 我已经在其他情况下成功地使用了starmap_async。 我在这里错过了什么??

---编辑---

我发现如果在上述工作程序中我更改了行

pool.starmap(printSum, params)

到以下两行:

result = pool.starmap_async(printSum, params)
result.get()

然后我得到了预期的结果,所以我想这至少解决了问题。 但是有人可以解释为什么.get()对于非async版本的map/starmap不是必需的,但对于async版本是必需的.get()? 真正令人困惑的是,对于async版本,在某些情况下.get()是必要的(如上所述(,但在其他情况下,对于async版本,.get()不是必需的,我无法确定如何/为什么/何时需要.get()除了通过实验。

您不会等待将来通过调用.starmap_async()获得的结果,也不会执行任何其他会阻止MainProcess在调度作业后立即退出的操作。

pool.starmap_async(printSum, params).wait()会这样做,但在这里毫无意义。仅当您需要同时取消阻止调用线程以执行其他操作时,异步变体才有意义。

相关内容

  • 没有找到相关文章

最新更新