gpt4 book ai didi

python - asyncio.create_task 装饰器不会同时执行

转载 作者:行者123 更新时间:2023-12-04 10:07:25 24 4
gpt4 key购买 nike

我在理解 asyncio 的 create_task 函数时遇到了一些麻烦。从文档中可以看出,任务在等待时应该同时运行。我将 async func 包装在 deocrator 中,因此我不必为每个 async 函数创建 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())

关于python - asyncio.create_task 装饰器不会同时执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61511665/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com