0

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

代码片段如下:

主程序:

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

子函数(*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 中创建的所有进程的输出“使用子函数完成”,但没有输出“我们在 main 函数中”。有人可以帮我解决问题吗?

4

1 回答 1

2

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

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

于 2012-04-06T19:46:59.453 回答