【发布时间】:2016-02-03 20:13:11
【问题描述】:
要求 - 我想使用管道 (|) 执行使用 ls、grep、head 等的命令。我正在搜索一些模式并提取一些信息,这些信息是我的 http 服务器支持的查询的一部分。
最终输出不应该太大,所以我假设 stdout 应该很好用(我在某处读到过死锁问题) 目前,我使用子进程模块中的 popen,但我对此表示怀疑。
- 可以同时触发多少个 popen 调用。
- 结果会立即出现在标准输出中吗? (现在看起来是这样,但是如果命令需要很长时间,如何确保它)
- 如何确保一切都是异步的 - 保持接近单线程模型?
我是 Python 新手,我也非常感谢视频/文章的链接。除了 popen 之外的任何其他方式也可以。
【问题讨论】:
-
这有点反模式。如果你只是想运行一个 pileline,为什么不使用 shell 脚本呢?为什么你甚至需要 Python?你到底想完成什么?
-
同时“popen 调用”的数量取决于操作系统限制和硬件资源。
-
@RolandSmith 它是 http 服务器查询处理的一部分。
-
我发布这个问题的原因之一是我想尽可能接近单线程哲学..如果需要线程池很好,但在最低级别..但可能有库没有阻塞,我可以使用它们..
-
您的具体问题是什么?一个异步。 gevent、twisted、tornado、asyncio 等框架提供了异步读取子进程输出的方法。需要
celery之类的任务队列吗?
标签: python python-3.x asynchronous scalability popen