我想通过打印出进程名称,标识符和任何东西来弄清楚每个进程中发生了什么。如何从python的多处理池中打印进程的进程名称
下面是一些测试代码(代码信贷这个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。 – univerio