Python子进程以异步方式Popen

Posted

技术标签:

【中文标题】Python子进程以异步方式Popen【英文标题】:Python subprocess Popen in async manner 【发布时间】:2021-01-27 00:38:33 【问题描述】:

假设您希望以异步方式在循环中启动多个并行进程,当然,为每个进程获取其退出代码并打印。

如果我们做一些天真的事情:

i = 5
While i > 0:
    p = sp.Popen(["./my_module.py", "arg1", "arg2"], stdout=sp.PIPE, stderr=sp.PIPE)
    out, err = p.communicate()
    result = p.returncode
    i -= 1

由于上面的 communicate 阻塞方法,这可能无法异步工作。 对于实现多进程分配异步方式并最终将结果累积在列表或其他东西中的最佳简单方法有什么想法吗?

【问题讨论】:

这能回答你的问题吗? Non blocking subprocess.call @ThiagoBarcala:我还没有看到任何具体的解决方案来累积多个进程运行的结果,此外我更喜欢避免异步 【参考方案1】:

试试this 项目。它是一个异步多处理实现。

更新: 此外,来自 stdlib 的 subprocess 模块现在支持 asyncio,请查看文档:https://docs.python.org/3/library/asyncio-subprocess.html

【讨论】:

以上是关于Python子进程以异步方式Popen的主要内容,如果未能解决你的问题,请参考以下文章

Popen 子进程进程在特定回复后停止阅读

我可以以某种方式与子进程共享一个异步队列吗?

如何使用子进程popen Python [重复]

在 Python 中分析子进程 Popen 调用

Python的子进程popen死锁

如何异步获取子进程'stdout数据?