Here is a simple simulation of how to run multiple process (or simply a function) in paralel using AsyncIO
from time import sleep, time
import asyncio
def delay(seconds):
"""
A normal function that simulates a blocking operation.
"""
print(f"Starting delay for {seconds} seconds.")
sleep(seconds)
print(f"Finished delay for {seconds} seconds.")
return f'sleep for {seconds} second(s)'
async def main():
start_time = time()
loop = asyncio.get_running_loop()
# Schedule the blocking functions to run in the default thread pool executor
# run_in_executor returns a future that we can await
tasks = [loop.run_in_executor(None, delay, seconds) for seconds in [3, 6, 9]]
# Now we await all the tasks to run concurrently
print("Waiting for all tasks to complete...")
results = await asyncio.gather(*tasks)
print(f'results: ', str(results))
end_time = time()
print("\n--- All tasks are done! ---")
print(f"Results: {results}")
print(f"Total time: {end_time - start_time:.2f} seconds")
if __name__ == "__main__":
asyncio.run(main())
Top comments (0)