【发布时间】:2021-12-31 02:40:39
【问题描述】:
我是 Python 3 multiprocessing 模块的新手,可能似乎误解了其中的一个概念。在我的应用程序中,像往常一样,我有一个主线程,还有另一个用于一些“后台”工作的线程,称为“BgThread”。从第二个线程我生成了一个Process 并通过start() 运行它。
新的子进程现在可以正确启动并开始工作了。但是,当我在(VS Code)调试器中查看我的应用程序时,我可以看到这个子进程也运行着第二个线程,也称为“BgThread”。
在 Linux 上运行我尝试通过 mp.set_start_method("spawn") 生成线程,如多处理文档中所述,但结果相同。此外,当我在我的第二个线程类的run() 方法中设置断点时,在子进程中它不会在那里停止(但在主进程中它是正确的)。
这是正常行为吗?如果是这样,那么我不明白 - 为什么子进程也从其父进程继承第二个线程,即使它似乎并没有真正通过它再次启动它,如上所述?是否需要阻止我的子进程再次启动第二个线程?
【问题讨论】:
-
你屏蔽了
if __name__ == "__main__":的多处理吗? -
看起来调试器的行为不正确。我会尝试调查
htop/top/ps -
@Timus 这是一个 Flask 应用程序,是的,我确实在其
run.py文件中使用了if语句。我还定义了通过multiprocessing.set_start_method("spawn")生成子进程,而不是分叉它。
标签: python multithreading multiprocessing subprocess