sha*_*aka 6 python async-await python-asyncio
async def caller():
await bar()
print("finish")
async def bar():
// some code here
Run Code Online (Sandbox Code Playgroud)
async def caller():
bar()
print("finish")
def bar():
//some code here
Run Code Online (Sandbox Code Playgroud)
在上面的例子中。两种情况下,调用者都必须等待 bar() 完成。在这种情况下,bar 成为普通/协程有什么不同吗?如果我们想“等待”某些函数,为什么不使用普通函数。
如果它不是一个async函数,那么显然你不需要await它。并非您在async函数内调用的每个函数都必须async也必须经过awaited;您可以从函数内调用常规非异步函数async。
整个 asyncio 模型围绕事件循环工作。任一时间只能运行一项任务,事件循环会协调当前正在运行的任务。函数await内部会暂停该函数的执行,并允许另一个任务在事件循环上运行。所以,在这个例子中:
async def caller():\n await bar()\n print('finish')\nRun Code Online (Sandbox Code Playgroud)\n执行过程是这样的:
\ncaller()在事件循环上调用并安排,一旦存在可用性就会执行它。bar(),后者在事件循环上安排其执行。await执行caller.bar;假设它正在发出网络请求,因此在响应返回之前不会发生任何事情,事件循环可以自由运行任何其他计划的异步任务\xe2\x80\xa6bar。bar结束后,事件循环继续执行caller.await存在是为了协调异步任务的运行顺序以及哪个任务取决于哪个其他任务的结果。
| 归档时间: |
|
| 查看次数: |
1628 次 |
| 最近记录: |