Skip to content

Instantly share code, notes, and snippets.

@samukasmk
Last active March 19, 2024 14:38
Show Gist options
  • Save samukasmk/06c3c35747f48b91277e322d229df6fa to your computer and use it in GitHub Desktop.
Save samukasmk/06c3c35747f48b91277e322d229df6fa to your computer and use it in GitHub Desktop.
Async.IO Example #1: Run 10 parallel tasks - And waiting all tasks to be done
import asyncio
from random import randint
async def execute_your_task(task_number: int):
""" Specific task to run in parallel """
# display begin of parallel task in console
print('-> starting parallel task:', task_number)
# sleeping by (randomly: between 1 and 5 seconds) just to see parallism working
seconds_to_sleep = randint(1, 5)
await asyncio.sleep(seconds_to_sleep)
# display end of parallel task in console
print('<- finishing parallel task:', task_number)
# return task information in a dict
return {'task_number': task_number, 'seconds_to_sleep': seconds_to_sleep}
async def running_parallel_tasks():
""" Running 10 parallel tasks - waiting all tasks to be done """
# define a list with 10 coroutine tasks to be run
tasklist_to_run = []
for n in range(1, 11):
coroutine_of_task = execute_your_task(n)
tasklist_to_run.append(coroutine_of_task)
# run 10 coroutine tasks in parallel wating all then to be done
task_results = []
for task_result in await asyncio.gather(*tasklist_to_run):
print('! received task result', task_result)
task_results.append(task_result)
return task_results
# Running my_tasks_runner as asynchronous mode
asyncio.run(running_parallel_tasks())
"""
In [1]: asyncio.run(running_parallel_tasks())
-> starting parallel task: 1
-> starting parallel task: 2
-> starting parallel task: 3
-> starting parallel task: 4
-> starting parallel task: 5
-> starting parallel task: 6
-> starting parallel task: 7
-> starting parallel task: 8
-> starting parallel task: 9
-> starting parallel task: 10
<- finishing parallel task: 2
<- finishing parallel task: 3
<- finishing parallel task: 6
<- finishing parallel task: 10
<- finishing parallel task: 4
<- finishing parallel task: 7
<- finishing parallel task: 1
<- finishing parallel task: 5
<- finishing parallel task: 8
<- finishing parallel task: 9
! received task result {'task_number': 1, 'seconds_to_sleep': 5}
! received task result {'task_number': 2, 'seconds_to_sleep': 1}
! received task result {'task_number': 3, 'seconds_to_sleep': 2}
! received task result {'task_number': 4, 'seconds_to_sleep': 4}
! received task result {'task_number': 5, 'seconds_to_sleep': 5}
! received task result {'task_number': 6, 'seconds_to_sleep': 2}
! received task result {'task_number': 7, 'seconds_to_sleep': 4}
! received task result {'task_number': 8, 'seconds_to_sleep': 5}
! received task result {'task_number': 9, 'seconds_to_sleep': 5}
! received task result {'task_number': 10, 'seconds_to_sleep': 3}
Out[1]:
[{'task_number': 1, 'seconds_to_sleep': 5},
{'task_number': 2, 'seconds_to_sleep': 1},
{'task_number': 3, 'seconds_to_sleep': 2},
{'task_number': 4, 'seconds_to_sleep': 4},
{'task_number': 5, 'seconds_to_sleep': 5},
{'task_number': 6, 'seconds_to_sleep': 2},
{'task_number': 7, 'seconds_to_sleep': 4},
{'task_number': 8, 'seconds_to_sleep': 5},
{'task_number': 9, 'seconds_to_sleep': 5},
{'task_number': 10, 'seconds_to_sleep': 3}]
"""
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment