Files
Python-2020/Tests/test2.py
T
2020-06-02 13:38:27 +02:00

56 lines
1.4 KiB
Python

import asyncio
import random
import time
async def worker(name, queue):
while True:
#get a work item out of the queue.
sleep_for = await queu.get()
#sleep for the 'sleep for' seconds.
await asyncio.sleep(sleep_for)
#notify the queue that the work item has been processed.
queue.task_done()
print(f'{name} has slept for {sleep_for:.2f} seconds')
async def main():
#create a queue that we will use to store our workload
queue = asyncio.Queue()
#generate random timings and put them into the queue
total_sleep_time = 0
for _ in range(2):
sleep_for = random.uniform(0.05, 1.0)
total_sleep_time += sleep_for
queue.put_nowait(sleep_for)
#create three worker tasks to process teh queue concurrently
tasks = []
for i in range(3):
task = asyncio.create_task(worker(f'worker-{i}', queue))
tasks.append(task)
started_at = time.monotonic()
await queue.join()
total_sleep_time = time.monotonic() - started_at
#cancel our worker tasks
for task in tasks:
task.cancel()
#wait until all worker tasks are cancelled.
await asyncio.gather(*tasks, return_exceptions=True)
print('===')
print(f'3 workers slept in parallel for {total_slept_for:.2f} seconds')
print(f'total expected sleep time: {total_sleep_time:.2f} seconds')
asyncio.run(main())