【发布时间】:2023-01-30 00:04:16
【问题描述】:
我有一个 python 脚本,它使用这些行启动多个子进程:
for elm in elements:
t = multiprocessing.Process(target=sub_process,args=[elm])
threads.append(t)
t.start()
for t in threads:
t.join()
有时,由于某种原因线程停止并且脚本永远不会完成。 我正在尝试使用 VSCode 调试器来查找问题并检查它卡在线程本身的位置,但是我在暂停这些子进程时遇到问题,因为当我在调试器窗口中单击暂停时:
它会暂停主线程和其他一些正常运行的线程,但不会暂停卡住的子进程。 即使当我尝试使用“调用堆栈”窗口一个一个地手动暂停线程时,我仍然只能暂停工作线程而不是卡住的线程。
请帮我弄清楚这件事,这是一件很难的事情,因为使进程卡住的事情并不总是发生,因此很难调试。
【问题讨论】:
-
您能否发布错误消息,就好像它正在运行那么多子进程一样,那么它可能是硬件限制,这可以解释为什么您会努力暂停子进程
-
@SophieOH 没有错误消息,这就是问题所在。但是我开始记录每一行,当我尝试获取信号量时,我发现它可能卡住了。
-
请问edit这个问题能否明确区分线程和进程?您的描述以子流程有问题开始,然后说 dir example “我仍然只能暂停工作线程而不是卡住的线程。”暗示您的问题出在线程上。(粗略地)知道进程/线程在做什么也很有帮助-例如,它们是使用编译代码(例如numpy)运行计算还是纯Python,做他们依赖外部资源,如分布式文件系统或网络?
-
不幸的是,回答您的问题并不能解决您的问题。这将需要访问更多代码。