我发现很多线程或多或少都与这个话题有关,而且几乎没有什么像完整的答案......我正在寻找你的建议。
所以,这是我的问题:我真的需要以两种方式与子进程通信:我必须将大量数据转发到其输入并动态获取其输出。没有其他办法了。我的子进程是着名的'跛脚'mp3编码器,输入是由我的函数生成的一小时或更长的PCM声音,输出是mp3文件,也必须通过块发送到用户块而无需等待编码器完成。< / p>
根据文档,Popen.communicate()不会帮助我处理数十或数百兆的IPC。同时,正如我从这里学到的,尝试从头开始创建这种方法是非常危险的,因为许多陷阱正在等待:死锁,缓冲,进程管理等。
所以,我的问题是:是否有一些众所周知的解决方案可以解决这类问题:一个python lib或一个真正解决问题的代码示例?可能至少有一篇文章或某些东西明显地描述了大多数问题可能会试图通过自己来解决这个问题吗?
提前谢谢你, 伊利亚安德。
答案 0 :(得分:2)
最简单的方法是将您自己的程序分成两部分:一部分写入LAME,另一部分从lame读取并写入用户。这比进行双向通信要容易得多。
如果这对您不起作用,我发现使用命名管道的开发比传统管道IPC更容易。在测试过程中很容易使用各种管道。 Nonblocking I/O in Python 3应该更容易访问它们。