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之后开始的。
| 归档时间: |
|
| 查看次数: |
416 次 |
| 最近记录: |