在Python中异步执行命令

时间:2015-11-03 15:37:14

标签: python python-3.x asynchronous scalability popen

要求 - 我想使用管道(|)执行使用ls,grep,head等的命令。我正在搜索一些模式并提取一些信息,这些信息是我的http服务器支持的查询的一部分。

最终输出不应该太大,所以假设stdout应该很好用(我在某处读到了死锁问题) 目前,我使用subprocess模块​​中的popen,但我对它有疑问。

  • 可以同时触发多少个popen调用。
  • 结果会立即进入标准输出? (现在它看起来如此,但如果命令需要很长时间,如何确保它)
  • 如何确保一切都是异步的 - 保持接近单线程模型?

我是Python的新手,并且对视频/文章的链接也很感激。除了popen以外的任何其他方式也没关系。

1 个答案:

答案 0 :(得分:1)

您可以使用os.walkls代替re,使用grep模块代替map

在功能中包装所有内容,并使用例如来自multiprocessing.Pool对象的Executors方法并行运行其中几个。这是一种非常有效的模式。

在Python3中,您也可以以类似的方式使用concurrent.futures中的require_once __DIR__.'/vendor/autoload.php';