python - Python 3.7,async/await 打印顺序错误
问题描述
我正在测试Python3.7 async/await 函数并编写了如下简单代码:
import asyncio
import time
async def first():
print('FIRST')
async def second():
time.sleep(2)
print('SECOND')
async def main():
asyncio.create_task(second())
asyncio.create_task(second())
asyncio.create_task(second())
asyncio.create_task(first())
asyncio.create_task(first())
asyncio.create_task(first())
asyncio.run(main())
当我运行此代码时,它会打印:
SECOND
SECOND
SECOND
FIRST
FIRST
FIRST
这不是我所期望的。我认为FIRST
s 应该首先打印,因为它们没有延迟。但是,在继续文本异步任务之前create_task
等待完成。second()
是否可以在不让它们相互等待的情况下执行异步任务?
解决方案
您必须使用该gather()
功能并修改您的代码。您还必须使用await
关键字。
import asyncio
import time
async def first():
print('FIRST')
await asyncio.sleep(1)
print('SECOND')
async def main():
await asyncio.gather(first(), first(), first())
asyncio.run(main())
推荐阅读
- user-interface - 寻找工具或组件将有助于用户查看跟踪数据和工作流管理
- c - 对“函数名”的未定义引用
- angular - Kendo DropDownList 自定义过滤器点击事件
- javascript - 反应从子组件重新渲染父组件不起作用
- google-cloud-platform - googleapi:错误 403:需要“compute.organizations.enableXpnHost”权限
- cmake - Qt-Cretor + CMake 在我想使用MinGW时坚持使用MSVC
- javascript - 如何使用 ReactJS 镜像切换按钮的状态?
- date - 有没有办法在 Julia 中制作自定义日期格式?
- ajax - 如何使用ajax刷新每个循环中的div?
- javascript - jQuery:检测拖动,并临时添加特定样式