Sync chores
We have a number of household chores to do. Each takes a couple of seconds for a machine to do while we have time to do something else. We also have one task, cleaning potatoes, that requires our full attention. It is a CPU-intensive process.
We also have two processes depending each other. We can turn on the dryer only after the washing machine has finished.
examples/async/sync_chores.py
import time def boil_water(sec): print(f"Start boiling water for {sec} seconds") time.sleep(sec) print(f"End boiling water for {sec} seconds") def washing_machine(sec): print("Start washing machine") time.sleep(sec) print("End washing machine") def dryer(sec): print("Start dryer") time.sleep(sec) print("End dryer") def dishwasher(sec): print("Start dishwasher") time.sleep(sec) print("End dishwasher") def clean_potatoes(pieces): print("Start cleaning potatoes") for ix in range(pieces): print(f"Cleaning potato {ix}") time.sleep(0.5) print("End cleaning potatoes") def main(): dishwasher(3) washing_machine(3) dryer(3) boil_water(4) clean_potatoes(14) start = time.time() main() end = time.time() print(f"Elapsed {end-start}")
Start dishwasher End dishwasher Start washing machine End washing machine Start dryer End dryer Start boiling water for 4 seconds End boiling water for 4 seconds Start cleaning potatoes Cleaning potato 0 Cleaning potato 1 Cleaning potato 2 Cleaning potato 3 Cleaning potato 4 Cleaning potato 5 Cleaning potato 6 Cleaning potato 7 Cleaning potato 8 Cleaning potato 9 Cleaning potato 10 Cleaning potato 11 Cleaning potato 12 Cleaning potato 13 End cleaning potatoes Elapsed 20.017353534698486