gpt4 book ai didi

python - 如何使用 asyncio 安排任务在执行程序中运行?

转载 作者:太空宇宙 更新时间:2023-11-04 02:26:51 24 4
gpt4 key购买 nike

我一直在使用 asyncio 进行并发,但是我遇到了一个问题。我需要使用 asyncio 安排一个任务,但它正在阻塞,所以我想使用 concurrent.futures 中的线程池在执行程序中执行它。

我见过这样的例子,它安排任务:

now = loop.time()
loop.call_at(now + 60, callback, arg, loop)

像这样在执行器中运行任务:

blocking_tasks = [
loop.run_in_executor(executor, blocks)
for i in range(6)
]
completed, pending = await asyncio.wait(blocking_tasks)

但是我怎样才能安排一个阻塞任务在执行器中运行呢?

最佳答案

run_in_executor 返回一个 future,因此您不能将它与 call_at 一起使用,后者需要一个普通函数。但是,您可以使用 asyncio.sleep() 轻松推迟执行:

async def my_task():
await asyncio.sleep(60)
result = await loop.run_in_executor(None, fn)
...

taskobj = loop.create_task(my_task())

这样做的好处是 create_task 创建的任务可以是canceled在 sleep 期间。此外,您可以从 my_task() 返回一个有用的值,并使用 await taskobj 获取它,调用 taskobj.result() , 或 loop.run_until_complete(taskobj) .

关于python - 如何使用 asyncio 安排任务在执行程序中运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50167582/

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