首页 > 解决方案 > 检索传递给取消的协程/任务的参数

问题描述

我正在尝试检索在asyncio.wait超时到期后传递给运行的协程/任务的参数。

例如:

todo = [f(10), f(20), g(20), f(30)]
done, pending = await asyncio.wait(todo, timeout=2.5)

如果 2.5 秒后 f(30) 没有返回并被取消,我只看到它<Task pending name='Task-3' coro=<f()...给了我匹配的协程f()但没有 args 的值......

知道如何获得这些参数吗?

谢谢

标签: pythonpython-3.xpython-asyncio

解决方案


知道如何获得这些参数吗?

一种直接的方法是在调用之前将它们附加到任务wait()

todo = []
for arg in 10, 20, 20, 30:
    task = asyncio.create_task(f(arg))
    task.f_arg = arg
    todo.append(task)
done, pending = await asyncio.wait(todo, timeout=2.5)
# creation arg available in `f_arg` regardless of whether the task
# is done or pending

推荐阅读