Mar*_*nen 5 python asynchronous python-3.x async-await python-3.6
我的代码:
import asyncio
async def test(i):
await asyncio.sleep(i)
print('test')
async def main():
await test(2)
await test(2)
await test(2)
asyncio.get_event_loop().run_forever(main())
Run Code Online (Sandbox Code Playgroud)
我原本希望它休眠三秒钟,然后打印'test'三遍,但是要等到每秒钟'test'分别等待2秒钟(所以最后一次'test'打印才6秒钟)。
我有什么不对的地方,怎么解决?
await暂停当前函数的执行,直到将来返回为止。在中test,使函数等待2秒钟直到asyncio.sleep返回,然后再打印。在中main,它使该函数等待直到test返回(执行print此操作之后再sleep返回),然后再继续执行next await test。
如果要同时执行所有操作test,并在两秒钟后一次打印它们,则可以使用asyncio.gather:
async def main():
await asyncio.gather(test(2), test(2), test(2))
Run Code Online (Sandbox Code Playgroud)
这样可以同时test在事件循环上安排三个协程,并等待它们的所有组合结果,这些结果将在约2秒内到达。
您也可以在不等待协程完成的情况下开火并忘记协程:
def main():
asyncio.ensure_future(test(2))
asyncio.ensure_future(test(2))
asyncio.ensure_future(test(2))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2381 次 |
| 最近记录: |