'Asyncio: All tasks are executed at once despite small grouped-tasks

I have created all the tasks in a for loop first.

loop = asyncio.get_event_loop()
tasks =[]

for i in range(100):
   task = loop.create_task(...)
   tasks.append(task)

Instead of executing all 100 of them, I am trying to fire just a few, say just 1, at a time so I did something like below

await asyncio.wait([tasks[0]]) # just the very first one in the list
# also tried with `asyncio.gather` instead of `asyncio.wait`.

Expected behavior (at least to me)

Work with the very first task as I am only providing one task

Actual behavior

All 100 tasks are fired. How can I only fire just a few?



Solution 1:[1]

How can I only fire just a few?

I think the pattern you are looking for is using a queue and having a controlled number of consumers (workers). See for example https://docs.python.org/3/library/asyncio-queue.html

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Carlos Horn