是asyncio.等待订单有保证吗?

2024-05-17 02:53:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试在我的库中实现基于异步的公平队列。在

在某些函数中,我有一个语句(假设socketX是任务):

done, pending = asyncio.wait(
    [socket1, socket2, socket3],
    return_when=asyncio.FIRST_COMPLETED,
)

现在,我阅读了^{}的文档很多次,但它不包含我要查找的信息。主要是想知道:

  • socket1socket2和{}碰巧在我发出呼叫时已经准备好了。它能保证done将包含它们全部还是只返回一个(或两个)?在
  • 在第二种情况下,传递给wait()的任务顺序是否重要?在

我试图断言我是否可以在一组done任务中应用公平队列(通过选择一个任务并将其他任务留待以后解决),或者我是否还需要关注任务的传递顺序。在

文档对此有点沉默。有什么想法吗?在


Tags: 函数文档asyncioreturn公平队列顺序语句
1条回答
网友
1楼 · 发布于 2024-05-17 02:53:15

这只根据python3.5的source code进行。在

如果在调用wait之前完成了将来的操作,则它们将全部放在done集中:

import asyncio

async def f(n):
    return n

async def main():
    (done, pending) = await asyncio.wait([f(1), f(2), f(3)], return_when=asyncio.FIRST_COMPLETED)
    print(done)     # prints set of 3 futures
    print(pending)  # prints empty set

loop = asyncio.get_event_loop()
loop.run_until_complete(main())
loop.close()

相关问题 更多 >