【发布时间】:2016-02-13 01:47:24
【问题描述】:
我试图通过打印出进程名称、标识符等任何内容来弄清楚每个进程中发生了什么。
下面是一些测试代码(代码归功于SO question:)
def f(x):
print multiprocessing.current_process().name
return x * x
def b():
p = multiprocessing.Pool()
print p.map(f, range(6))
def main():
b()
它产生的输出是:
PoolWorker-6
PoolWorker-10
PoolWorker-10
PoolWorker-11
PoolWorker-14
PoolWorker-15
[0, 1, 4, 9, 16, 25]
这是我认为我想要/需要帮助我调试我的程序有什么问题的。但是,我的代码略有不同(我需要从其他人那里修复遗留代码)。我下面的代码没有打印出漂亮的 PoolWorker ID。
def f(x):
print multiprocessing.current_process().name
return x * x
def b():
p = multiprocessing.Pool()
for i in range(10):
p.apply_async(f(i))
def main():
b()
当我运行这段代码时,它会打印出来:
MainProcess
MainProcess
MainProcess
MainProcess
MainProcess
MainProcess
所以我的代码使用 Pool.apply_sync() 而不是 Pool.map()。如何为每个进程打印出一些唯一标识符/名称,以便我了解正在发生的事情?提前感谢您的帮助。
【问题讨论】:
-
那是因为你在父进程中调用了
f(i)而没有发送给每个worker。
标签: python python-2.7 multiprocessing