【问题标题】: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(...)

如何以非阻塞方式确定系统调用是否仍在运行?

【问题讨论】:

    标签: python-3.x subprocess python-asyncio


    【解决方案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。
    猜你喜欢
    • 2011-01-10
    • 1970-01-01
    • 2021-05-29
    • 2012-06-04
    • 2015-04-17
    • 1970-01-01
    • 2012-12-10
    相关资源
    最近更新 更多