因此,我有一个列表,我想以非阻塞方式同时调度这些任务。基本上,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但是我如何发送等待列表而不只是等待列表?
我想要的是所有花费>超时时间的任务都取消,然后我继续执行现有的操作。
这很容易用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]被阻止...
仅阻止当前协程,与gather
或wait_for
相同。