【发布时间】:2021-01-24 18:54:53
【问题描述】:
对于由 asyncio.subprocess.Process 类创建的 p 对象
p = await asyncio.create_subprocess_exec(...)
如何以非阻塞方式确定系统调用是否仍在运行?
【问题讨论】:
标签: python-3.x subprocess python-asyncio
对于由 asyncio.subprocess.Process 类创建的 p 对象
p = await asyncio.create_subprocess_exec(...)
如何以非阻塞方式确定系统调用是否仍在运行?
【问题讨论】:
标签: python-3.x subprocess python-asyncio
由于 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
【讨论】:
subprocess.Popen 有一个 poll() 方法,asyncio.subprocess.Process 明确提到缺少 poll()。遗漏显然是故意的,但没有提供任何理由。想到的唯一原因是作者认为上述实现“显而易见”并省略了poll(),原因与异步同步方法中省略了 timeout 参数相同。