我想知道是否可以在不将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命令(启动另一个应用程序),然后等待它们的结果。
答案 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())