当Popen.communicate()还不够时?

izh*_*hak 5 python subprocess ipc popen

我发现很多线程或多或少都与这个主题有关,而且几乎没有什么像完整的答案......我正在寻找你的建议.

所以,这是我的问题:我真的需要以两种方式与子进程通信:我必须将大量数据转换为其输入并动态获取其输出.没有其他办法了.我的子进程是着名的"跛脚"mp3编码器,输入是由我的函数生成的一小时或更长的PCM声音,输出是mp3文件,也必须通过块发送到用户块而无需等待编码器完成.

根据文档,Popen.communicate()不会帮助我处理几十或几百兆的IPC.同时,正如我从这里学到的,尝试从头开始创建这种方法是非常危险的,因为很多陷阱正在等待:死锁,缓冲,进程管理等.

所以,我的问题是:是否有一些众所周知的解决方案可以解决这类问题:一个python lib或一个真正解决问题的代码示例?可能至少有一篇文章或某些东西明显地描述了大多数问题,试图通过自己来解决这个问题?

谢谢你,伊利亚.

max*_*max 2

最简单的方法是将您自己的程序分成两部分:一个写入 LAME,另一个从 lame 读取并写入用户。这比双向通信容易得多。

如果这对你不起作用,我发现使用命名管道进行开发比传统管道 IPC 容易得多。在测试过程中很容易使用各种管道。Python 3 中的非阻塞 I/O应该会让访问它们变得更加容易。