【发布时间】:2020-10-02 11:26:34
【问题描述】:
请注意,此问题不与Python Subprocess.Popen from a thread 相同,因为该问题并未寻求解释为什么可以。
如果我理解正确,subprocess.Popen() 通过 fork 当前进程并执行新程序来创建一个新进程。
但是,如果当前进程是多线程的,并且我们在其中一个线程中调用subprocess.Popen(),它会不会复制当前进程中的所有线程(因为它调用系统调用fork())?如果是这样的话,虽然这些重复的线程会在系统调用execv 之后被清除掉,但是重复的线程会在一段时间内做一些令人讨厌的事情。
一个典型的例子是gtest_parallel.py,程序在execute_tasks()中创建了一堆线程,并且在每个线程中task_manager.run_task(task)会调用task.run(),它调用subprocess.Popen()来运行一个任务。还好吗?
这个问题适用于其他线程分叉程序,而不仅仅是 Python。
【问题讨论】:
标签: python multithreading subprocess python-multiprocessing