问题
我正在使用 Python 的多处理模块来异步执行函数。我想要做的是能够在每个进程调用和执行时跟踪我的脚本的整体进度def add_print
。例如,我希望下面的代码在每次进程运行该函数时添加 1total
并打印出值 ( )。1 2 3 ... 18 19 20
我的第一次尝试是使用全局变量,但这不起作用。由于该函数是异步调用的,因此每个进程读取total
为 0 开始,并独立于其他进程添加 1。所以输出是 201
而不是递增值。
即使函数异步运行,我如何才能以同步方式从映射函数中引用同一块内存?我的一个想法是以某种方式缓存total
在内存中,然后在我添加到total
. 这是python中一种可能且基本合理的方法吗?
如果您需要更多信息,或者我解释得不够好,请告诉我。
谢谢!
代码
#!/usr/bin/python
## Import builtins
from multiprocessing import Pool
total = 0
def add_print(num):
global total
total += 1
print total
if __name__ == "__main__":
nums = range(20)
pool = Pool(processes=20)
pool.map(add_print, nums)