Intuitively, the output should always be 15. But sometimes, it generate 11 or 12 or something else. I tried add some delay, but didn't solve the problem.
from multiprocessing import Pool, Manager
import time
def func(dic, c):
dic['count'] += c
# time.sleep(0.1)
if __name__=="__main__":
d = Manager().dict() # a manager to enable data sharing b
d['count'] = 0
args = [(d,1), (d,2), (d,3), (d,4), (d,5)]
pool = Pool(5)
pool.starmap(func, args)
pool.close()
pool.join()
print(f'dic={d}')