【发布时间】:2018-09-18 14:06:55
【问题描述】:
来自使用Popen.wait() 的文档可能:
使用 stdout=PIPE 和/或 stderr=PIPE 和子时出现死锁 进程向管道生成足够的输出,从而阻止等待 让操作系统管道缓冲区接受更多数据。使用communicate() 来避免 那个。
在交流docs 中写道:
读取的数据缓存在内存中,所以如果 数据量大或无限制
如何重现这种有问题的行为并查看使用Popen.communicate() 修复它?
死锁意味着持有资源的进程之间发生了一些循环等待,并且永远卡住了。 这里的循环依赖是什么?等待子进程终止的 Python 进程是一个等待。另一个是什么?谁在下面的场景中等待什么?
它阻塞等待操作系统管道缓冲区接受更多数据
【问题讨论】:
-
如果您遇到了死锁,通信将不会“修复”它。您应该首先使用通信,以避免陷入僵局。
-
实际上我遇到过这样的情况,每次运行时使用等待的代码都会卡住,直到它被修改为使用通信并且不再卡住了。所以我想重现死锁的情况,看看沟通解决了它
标签: python python-3.x subprocess deadlock popen