gpt4 book ai didi

python - 当多处理进程打开另一个进程时程序在调试中挂起

转载 作者:行者123 更新时间:2023-12-03 17:34:43 25 4
gpt4 key购买 nike

在 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。

最佳答案

我刚刚遇到了类似的问题,并发现我在使用 map() 调用的函数内放置了一个断点。方法。删除此断点或忽略断点为我解决了问题。希望这会有所帮助。

关于python - 当多处理进程打开另一个进程时程序在调试中挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49175604/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com