首页 > 解决方案 > 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

这不是我所期望的。我认为FIRSTs 应该首先打印,因为它们没有延迟。但是,在继续文本异步任务之前create_task等待完成。second()

是否可以在不让它们相互等待的情况下执行异步任务?

标签: pythonpython-3.xasync-awaitpython-asyncio

解决方案


您必须使用该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())

推荐阅读