进程无法在python多处理池中停止

时间:2012-04-06 19:42:27

标签: python multiprocessing pool

我有一个使用python多处理的程序。我发现在主程序中创建的所有进程都可以完成,但主程序总是在等待返回值并且无法停止。有人可以就如何解决这个问题给我一些建议吗?

代码段如下:

主程序:

workers = multiprocessing.Pool(4)
args = [arg1, arg2, arg3, arg4]
results = workers.map(subfunc, args)
print "we are in main functions "

subfunc(* ARG)

# doing some other jobs
result = {.....} # a large dictionary
print 'done with sub functions'
return result # if I change it to  "return 1", it can finish successfully

我可以看到在main中创建的所有进程的输出“使用子函数完成”,但没有输出“我们在主函数中”。任何人都可以帮我解决问题吗?

1 个答案:

答案 0 :(得分:2)

subfunc返回其结果后,子进程仍然需要拾取结果并通过进程间通信将其发送到主进程。所以他们在子进程实际准备好终止之前打印“完成”。

您可以尝试返回"fake"以确保问题出现,然后考虑如何更快地在流程之间传达结果。例如,根据列表的内容,您可能能够以更严格的格式打包内容,或者共享内存是可行的选项。