我试图了解async / await在Python中是如何工作的。所以我想创建一个使用这种语法的小型演示程序。
async def f():
创建了一个协程。据我所知,coroutine是一个可恢复的功能。因此,它应该能够启动,而不是屈服控制(可选地带有一些中间结果),然后应该可以恢复它,最后函数应该返回一些值。
但即使让它运行也不是那么容易!简单程序:
# tstasync.py
async def f():
print("f is running!")
return 42
f()
抱怨:RuntimeWarning: coroutine 'f' was never awaited
。
使用await
关键字无济于事:
File "./tstasync.py", line 6
await f()
^
SyntaxError: invalid syntax
这是因为await
只能在另一个async
函数中使用!那么如何开始?
然后,我的异步函数如何产生控制权?异步函数中不允许使用yield
关键字。它应该调用await
某些东西(另一个协同程序),但是如果另一个coruotine没有等待其他东西它就行不通。再次关闭圈子。
演示程序不应使用asyncio
或任何其他模块/框架。因为async / await语法是一般的python语法,所以它不是asyncio
的一部分,因此应该可以在不使用任何asyncio-magic的情况下理解它的作用。