繁体   English   中英

Python Asyncio子进程永远不会完成

[英]Python Asyncio subprocess never finishes

我有一个简单的python程序,我用它来测试子进程的asyncio:

import sys, time
for x in range(100):
    print("processing (%s/100)    " % x)
    sys.stdout.flush()
print("enjoy")
sys.stdout.flush()

在命令行上运行它会产生所需的结果。

但是,从asyncio调用时,它永远不会完成

process = yield from asyncio.create_subprocess_exec(
    *["python", "program.py"],
    stdout=async_subprocess.PIPE,
    stderr=async_subprocess.STDOUT,
    cwd=working_dir
)

# this never finishes
yield from process.communicate()

ps ax显示此过程<defunct> ,不确定这意味着什么

我怀疑你的问题与你如何调用asyncio.create_subprocess_execprocess.communiate() 这个完整的例子适合我:

import asyncio
from asyncio import subprocess

@asyncio.coroutine
def do_work():
    process = yield from asyncio.create_subprocess_exec(
        *["python", "program.py"],
        stdout=subprocess.PIPE,
        stderr=subprocess.STDOUT
    )

    stdout, _= yield from process.communicate()
    print(stdout)

if __name__  == "__main__":
    loop = asyncio.get_event_loop()
    loop.run_until_complete(do_work())

您必须在asyncio.coroutine放置使用yield from代码,然后在事件循环内调用它(使用loop.run_until_complete ),以使其按照您希望的方式运行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM