如何在不等待每个父函数调用的情况下使用python async def

时间:2020-02-19 08:37:40

标签: python python-3.x asynchronous async-await python-asyncio

我想知道是否可以在不将main设置为异步的情况下创建异步功能。

我有这样的函数调用:

async def C:
    t = asyncio.create_subprocess_shell(command)
    ...
    await t

def B:
    asyncio.set_event_loop(asyncio.new_event_loop())
    C()
    <How to await for C?>

def A:
    B()

我无法等待C(无论是作为任务还是将来)。启动C()后,该函数立即退出。我已经尝试过loop.create_task和loop.run_until_complete(task),但似乎没有任何作用。

我不想将所有父函数调用都设置为与main()异步。有办法吗?

编辑: 我最初的问题是从python函数并行运行多个shell命令(启动另一个应用程序),然后等待它们的结果。

1 个答案:

答案 0 :(得分:0)

在现代Python(3.7及更高版本)中使用asyncio的规范方法如下:

async def main():
    ... your code here ...

async.run(main())

要并行执行多项操作,可以使用asyncio.gather。例如:

async def main():
    proc1 = await asyncio.create_subprocess_shell(command1)
    proc2 = await asyncio.create_subprocess_shell(command2)

    # wait in parallel for both processes to finish and obtain their statuses
    status1, status2 = await asyncio.gather(proc1.wait(), proc2.wait())