Python asyncio.subprocess():如何查看它是不是还在运行
Posted
技术标签:
【中文标题】Python asyncio.subprocess():如何查看它是不是还在运行【英文标题】:Python asyncio.subprocess(): How to see whether it is still runningPython asyncio.subprocess():如何查看它是否还在运行 【发布时间】:2021-01-24 18:54:53 【问题描述】:对于由 asyncio.subprocess.Process
类创建的 p
对象
p = await asyncio.create_subprocess_exec(...)
如何以非阻塞方式确定系统调用是否仍在运行?
【问题讨论】:
【参考方案1】:由于 asyncio Process
没有 poll()
方法,您可以结合 Process.wait()
和 asyncio.wait_for()
,使用一个微小的超时来允许 wait()
检查进程是否完成并设置 @987654327 @ 属性如果是这样。
async def is_running(proc):
with contextlib.suppress(asyncio.TimeoutError):
await asyncio.wait_for(proc.wait(), 1e-6)
return proc.returncode is None
【讨论】:
那是天才!为什么 Process 不将其实现为成员函数? @Frank-ReneSchäfer 这是个好问题。subprocess.Popen
有一个 poll()
方法,asyncio.subprocess.Process
明确提到缺少 poll()
。遗漏显然是故意的,但没有提供任何理由。想到的唯一原因是作者认为上述实现“显而易见”并省略了poll()
,原因与异步同步方法中省略了 timeout 参数相同。
我想,有些人应该和这些作者谈谈 :-)
@Frank-ReneSchäfer bugs.python.org 上的一个问题可能是一个好的开始。还有一个mailing list。以上是关于Python asyncio.subprocess():如何查看它是不是还在运行的主要内容,如果未能解决你的问题,请参考以下文章
我可以将长 bash 命令传递给 asyncio.subprocess.create_subprocess_exec() 吗?
连接两个以 asyncio.subprocess.create_subprocess_exec() 开始的进程
使用 asyncio.create_subprocess_exec 设置最大并发
任何人都可以将此 rsync 命令解析为与 asyncio.subprocess 一起使用的列表吗?