Files
Python-for-Geeks/Chapter07/asyncio/asyncio3.py
T
2021-08-13 11:44:51 +05:30

39 lines
1023 B
Python

#asyncio3.py to distribute work via queue
import asyncio
import random
import time
async def executer(name, queue):
while True:
exec_time = await queue.get()
await asyncio.sleep(exec_time)
queue.task_done()
print(f'{name} has taken {exec_time:.2f} seconds')
async def main ():
myqueue = asyncio.Queue()
calc_exuection_time = 0
for _ in range(10):
sleep_for = random.uniform(0.4, 0.8)
calc_exuection_time += sleep_for
myqueue.put_nowait(sleep_for)
tasks = []
for id in range(3):
task = asyncio.create_task(executer(f'Task-{id+1}', myqueue))
tasks.append(task)
start_time = time.monotonic()
await myqueue.join()
total_exec_time = time.monotonic() - start_time
for task in tasks:
task.cancel()
await asyncio.gather(*tasks, return_exceptions=True)
print(f"Calculated execution time {calc_exuection_time:0.2f}")
print(f"Actual execution time {total_exec_time:0.2f}")
asyncio.run(main())