python - Python多处理-starmap_async在starmap的地方不起作用?
问题描述
此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
.get()
async
async
.get()
async
.get()
.get()
解决方案
您无需等待通过调用获得的未来.starmap_async()
的结果,或者执行任何其他会阻止MainProcess
在安排作业后立即退出的事情。
pool.starmap_async(printSum, params).wait()
会这样做,但在这里毫无意义。异步变体仅在您需要解除阻塞调用线程以同时执行其他操作时才有意义。
推荐阅读
- c# - 无法在 Angular 中使用订阅来获取响应
- python - Pytorch:为什么我的数据集方差没有得到正确的结果?
- image - 以 Typo3 9.5 纵横比裁剪图像后,在第一个值上跳回
- tableau-api - 在 Tableau 中查找只有一行具有特定值的维度
- c++ - 在 for 循环中使用自定义类对象访问类的 std::vector
- python - 应该是字符串“Punch”的内容被视为整数
- wordpress - 店面的引导替代品
- nginx - 为特定请求模式配置 Nginx 连接超时
- algorithm - Rete算法的时间复杂度是多少?
- python - __radd__() 方法以 Numpy Array 为 other,Numpy Array 被一一传递