linux - subprocess.Popen 使用 Python3 挂起约 70 秒?
问题描述
在我的程序中,我有这个用于在 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))
我的程序使用来自不同线程的这个函数来执行命令。有时,“Popen”行需要大约 70 秒才能完成。我的意思是,在一天内不同程序运行的数千次调用中,这种情况发生了大约 4-5 次。据我所知,Popen 是非阻塞的。对我来说奇怪的是,当它确实发生时,它需要同样的 70 秒才能开始。重要的是要注意,当这种情况发生时,我有 3-4 个其他线程正在循环中等待:
while some_counter > 0:
time.sleep(0.5)
他们这样做最多 60 秒。在他们放弃并完成他们的流程后,我又看到了大约 14 秒,直到“Popen”调用结束。从某些线程并行运行“Popen”与让其他线程处于“等待循环”中是否存在问题?
更新 1: 我现在看到这个问题是在我从 Fedora27+Python3.6 切换到 Fedora31+python3.7 后开始的。
解决方案
推荐阅读
- python - 为什么 jupyter notebook 和我的烧瓶应用程序中的词云输出不同?
- angular - 角卡导航问题
- python - Vim 正则表达式不创建语法组
- angular - PWA 在 Ionic 5 中的应用程序更新时自动刷新/更新客户端
- reactjs - 如何使用 React JS 发布日期和小时数?
- ios - 颤振:SFSafariViewController 不像原生 iOS 模式那样打开
- c# - XmlSerializer 访问父元素中的子逻辑元素
- azure - ADF 从列中删除换行符
- javascript - 使用不同的 CSS 和图像创建多个构建?
- javascript - Javascipt 流畅的滚动体验