相关疑难解决方法(0)

有人可以解释管道缓冲区死锁吗?

Popen的Python文档指出:

警告使用communic()而不是.stdin.write,.stdout.read或.stderr.read来避免由于任何其他OS管道缓冲区填满和阻止子进程而导致的死锁.

现在,我试图弄清楚这种僵局是如何发生的以及原因.

我的心理模型:subproccess生成一些stdout/err,它被缓冲,填充缓冲区之后,它被刷新到subproccess的stdout/err,它通过管道发送到父进程.

从文档说明,管道拥有它自己的缓冲区,当它被填充或子进程终止时,它被刷新到父进程.

无论哪种方式(使用管道缓冲区),我都不完全确定死锁是如何发生的.我唯一能想到的是某种"全局"OS管道缓冲进程将会争取,这听起来很奇怪.另一个是更多进程将共享相同的管道,这不应该自己发生.

有人可以解释一下吗?

python operating-system pipe

10
推荐指数
2
解决办法
4639
查看次数

标签 统计

operating-system ×1

pipe ×1

python ×1