Python:等待最外层的异步函数
可以等待使用'async'关键字(Python 3.5+)创建的Python协同程序,但是不能等待最外层的一个,因为Python说“SyntaxError:'await'outside function”Python:等待最外层的异步函数,python,promise,async-await,python-asyncio,coroutine,Python,Promise,Async Await,Python Asyncio,Coroutine,可以等待使用'async'关键字(Python 3.5+)创建的Python协同程序,但是不能等待最外层的一个,因为Python说“SyntaxError:'await'outside function” 如何“等待”上述示例中的“f”函数?不可能在全局范围内等待,而是按如下方式运行事件循环: import asyncio as aio async def f(): print(1) await aio.sleep(3) print(2) return 3 d
如何“等待”上述示例中的“f”函数?不可能在全局范围内等待,而是按如下方式运行事件循环:
import asyncio as aio
async def f():
print(1)
await aio.sleep(3)
print(2)
return 3
def fdone(r):
print(r.result())
loop = aio.get_event_loop()
t = loop.create_task(f())
t.add_done_callback(fdone)
loop.run_until_complete(t)
print(4)
不可能在全局范围内等待,而是按如下方式运行事件循环:
import asyncio as aio
async def f():
print(1)
await aio.sleep(3)
print(2)
return 3
def fdone(r):
print(r.result())
loop = aio.get_event_loop()
t = loop.create_task(f())
t.add_done_callback(fdone)
loop.run_until_complete(t)
print(4)
如果使用Python 3.7+,语法更简单(无需手动创建循环等):
如果使用Python 3.7+,语法更简单(无需手动创建循环等): 一个更简单的
打印(loop.run_直到完成(f())
也同样有效,而run_直到完成()
将自动创建任务。您不需要add_done_callback
,因为run_until_complete()
会返回它收到的等待结果。一个更简单的打印(loop.run_until_complete(f())
也可以工作,因为run_until_complete()
会自动创建任务。您不需要add_done_callback
,因为run_until_complete()
返回它收到的等待结果。
import asyncio as aio
async def f():
print(1)
await aio.sleep(3)
print(2)
return 3
print(aio.run(f())