Consider this working example, calling a function sequentially three times:
import time
start = time.perf_counter()
def do_something():
print("Sleeping 1 second ...")
time.sleep(1)
print("Done Sleeping...\n")
do_something()
do_something()
do_something()
finish = time.perf_counter()
print("\n\n")
print(f"Finished in {round(finish-start,2)} second(s)")
I get the expected output:
Sleeping 1 second ...
Done Sleeping...
Sleeping 1 second ...
Done Sleeping...
Sleeping 1 second ...
Done Sleeping...
Finished in 3.07 second(s)
However, when I try to use the multiprocessing
standard library to call it in parallel, I don't see any output. My attempt is:
import multiprocessing
import time
Nbre = multiprocessing.cpu_count()
print(f"Number of CPUs = {Nbre}")
start = time.perf_counter()
def do_something():
print("Sleeping 1 second ...")
time.sleep(1)
print("Done Sleeping...\n")
p1 = multiprocessing.Process(target = do_something)
p2 = multiprocessing.Process(target = do_something)
p3 = multiprocessing.Process(target = do_something)
p1.start()
p2.start()
p3.start()
p1.join()
p2.join()
p3.join()
finish = time.perf_counter()
print("\n")
print(f"Finished in {round(finish-start,2)} second(s)")
and the result is:
Number of CPUs = 8
Finished in 0.12 second(s)
Why don't I see the print
output from do_something
? How can I fix the code?