asyncio.create_task 装饰器没有并发执行

asyncio.create_task decorator doesn't execute concurrently

我在理解 asyncio 的 create_task 函数时遇到了一些问题。根据文档,任务在等待时应该 运行 同时进行。我将异步函数包装在 deocrator 中,因此我不必为每个异步函数都使用 create_task() 。但是并发执行失败

  import asyncio
  import time


  def async_task(func):
      def wrapper():
          return asyncio.create_task(func())
      return wrapper


  @async_task
  async def bar() -> int:
      await asyncio.sleep(3)
      return "hello"


  @async_task
  async def foo() -> int:
      await asyncio.sleep(3)
      return "world"


  async def main() -> None:
      print(time.strftime('%X'))
      print(await bar())
      print(await foo())
      print(time.strftime('%X'))

  asyncio.run(main())

有区别:

asyncio.create_task(async_fun())

await asyncio.create_task(async_fun())

第二个在继续之前等待任务完成,因此您仅在 bar 完成后才安排 foo。

首先创建任务然后等待它们:

foo_task = foo()
bar_task = bar()
await foo_task
await bar_task

或使用asyncio.gather

await asyncio.gather(foo(), bar())