Я уже написал свой сценарий, используя 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?