Рассмотрим следующий код для управления параллелизмом с идентичными асинхронными c задачами
import asyncio
async def performTask(id):
await asyncio.sleep(1)
print(id)
async def runBatchItem(semaphore, task):
await semaphore.acquire()
await task
semaphore.release()
async def main():
# all tasks
tasks = [performTask(i) for i in range(20)]
# concurrency handler
MAX_CONCURRENT = 3
semaphore = asyncio.Semaphore(value=MAX_CONCURRENT)
stasks = [runBatchItem(semaphore, task) for task in tasks]
await asyncio.wait(stasks)
asyncio.run(main())
Независимо от того, как часто я запускаю его, у меня всегда получается следующая последовательность выходных данных
3 19 4 5 6 7 8 17 9 10 11 12 13 0 14 1 15 2 16 18
- Вопрос 1. Что такое logi c для этого порядка моих задач?
- Вопрос 2. Что, если я хочу, чтобы задачи обрабатывались в приблизительной вставке порядок? Т.е. как работа через очередь с ограниченным параллелизмом.
Заранее спасибо!