subprocess.Popen 使用 Python3 挂起约 70 秒?

Bob*_*ano 9 linux subprocess popen python-multithreading python-3.7

在我的程序中,我有一个用于在 shell 中执行命令的实用函数,这是它的一个简化版本:

def run_command(cmd):
    s = time.time()
    print('starting subprocess')
    proc = subprocess.Popen(cmd.split(),
                            stdout=subprocess.PIPE,
                            stderr=subprocess.PIPE,
                            universal_newlines=True)
    print('subprocess started after ({0}) seconds'.format(time.time() - s))
Run Code Online (Sandbox Code Playgroud)

我的程序使用来自不同线程的这个函数来执行命令。有时,“Popen”行需要大约 70 秒才能完成。我的意思是在一天内在不同程序运行的数千次调用中,这种情况发生了大约 4-5 次。据我所知,Popen 是非阻塞的。对我来说奇怪的是,当它确实发生时,它需要相同的大约 70 秒才能启动。重要的是要注意,在发生这种情况时,我还有 3-4 个其他线程在循环中等待:

while some_counter > 0:
    time.sleep(0.5) 
Run Code Online (Sandbox Code Playgroud)

他们这样做最多 60 秒。在他们放弃并完成他们的流程后,我看到还有大约 14 秒,直到“Popen”调用结束。从某些线程并行运行“Popen”与“等待循环”中的其他线程是否存在问题?

更新1: 我现在看到这个问题是在我从Fedora27+Python3.6切换到Fedora31+python3.7之后开始的。