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.
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