将wait_for与超时一起用于任务列表

问题描述 投票:0回答:1

因此,我有一个列表,我想以非阻塞方式同时调度这些任务。基本上,gather应该可以解决问题。喜欢

tasks = [ asyncio.create_task(some_task()) in bleh]
results = await asyncio.gather(*tasks)

但是然后,我也需要超时。我想要的是所有花费>超时时间的任务都将取消,然后我继续执行已有的操作。

我应该使用asyncio.wait原语。https://docs.python.org/3/library/asyncio-task.html#waiting-primitives

但是医生说:Run awaitable objects in the aws set concurrently and block until the condition specified by return_when.

似乎暗示它会阻止...

似乎asyncio.wait_for可以解决问题https://docs.python.org/3/library/asyncio-task.html#timeouts但是我如何发送等待列表而不只是等待列表?

python-asyncio python-3.7
1个回答
0
投票

我想要的是所有花费>超时时间的任务都取消,然后我继续执行现有的操作。

这很容易用asyncio.wait()实现:

# Wait for tasks to finish, but no more than a second.
done, pending = await asyncio.wait(tasks, timeout=1)
# Cancel the ones not done by now.
for fut in pending:
    fut.cancel()
# Results are available as x.result() on futures in `done`

似乎暗示[asyncio.wait]被阻止...

仅阻止当前协程,与gatherwait_for相同。

© www.soinside.com 2019 - 2024. All rights reserved.