【发布时间】:2023-03-26 01:51:02
【问题描述】:
我已经使用 asyncio 编写了我的脚本,但发现同时运行的协程数量太多,并且经常会挂起。
所以我想限制并发的协程数量,一旦达到限制,我想等待任何一个协程完成后再执行另一个。
我当前的代码如下所示:
loop = asyncio.get_event_loop()
p = map(my_func, players)
result = loop.run_until_complete(asyncio.gather(*p))
async def my_func(player):
# something done with `await`
players 的类型为 list,包含许多元素(例如 12000)。在asyncio.gather(*p)中同时运行所有这些需要大量的计算资源,所以我希望同时运行的玩家数量为200。一旦达到199,我希望另一个协程开始执行。
这在 asyncio 中可行吗?
【问题讨论】:
-
asyncio queueing 库可能对您有用吗?
-
协程实际上并不是同时运行的,如果你是这么想的话。他们轮流进行。
-
@castis 谢谢,让我看看...
标签: python python-asyncio