在python程序中,使用multiprocessing.Process
打开进程。然后,此过程正在创建Pool
,以便使用map()
方法为其提供一些工作。
当程序正常运行时,所有程序都按预期工作。但是,当它在PyCharm调试器中运行时,对Pool.map
的调用永远不会返回并且程序被锁定。
以下简单示例演示了该问题:
1)代码:
import multiprocessing
def inc(a):
return a + 1;
def func():
p = multiprocessing.Pool(2)
print("before map")
res = p.map(inc, [1,4]) # ==> the method hangs in debug.
print("after call map")
p.close()
p.join()
print(res)
def main():
p = multiprocessing.Process(target=func)
p.start()
p.join()
if __name__ == '__main__':
main()
2)运行程序时按预期输出:
before map
after call map
[2, 5]
Process finished with exit code 0
3)程序在调试器中运行时的输出 - 永远不会完成:
pydev debugger: process 13792 is connecting
Connected to pydev debugger (build 173.4301.16)
before map
这只是一个非常讨厌的调试问题(可能是由调试器后台线程引起的?)?或者它是一个多处理问题,也可能出现在实际运行中?
应该提到的是,仅使用其中一个子处理步骤,即只打开Process()
或仅使用pool.map()
,不会导致任何问题并且可以进行调试。问题仅出现在“嵌套”子处理中,如上所述。
我在Windows 10 64位计算机上运行PyCharm。
答案 0 :(得分:0)
我刚刚遇到了类似的问题,并发现我在使用 map()
方法调用的函数内放置了一个断点。删除此断点或忽略断点为我解决了问题。希望这会有所帮助。