from multiprocessing import Manager,Process,Lock # def work(d,lock): # with lock: #不加锁而操作共享的数据,肯定会出现数据错乱 # d['count']-=1 # # if __name__ == '__main__': # lock=Lock() # with Manager() as m: # dic=m.dict({'count':100}) # p_l=[] # for i in range(100): # p=Process(target=work,args=(dic,lock)) # p_l.append(p) # p.start() # for p in p_l: # p.join() # print(dic) def work(d): d["count"] += 1 if __name__ == '__main__': lock = Lock() m = Manager() # 返回的是一个管理器对象 dic = m.dict({"count":100}) # 管理对象创建的字典,具有排它性,同一时刻多个进程访问报错 p = Process(target=work,args=(dic,)) p.start() p.join() # 注释掉,这一行,会报错 print(dic) # A manager object returned by Manager() controls a server process which holds Python objects and # allows other processes to manipulate them using proxies.
import time import random from multiprocessing import Process,Manager import multiprocessing def eat(ls): print("先洗洗手...") time.sleep(random.randint(1,5)) food =ls.pop() print(f"开始吃{food}") ls.append("lemon") if __name__ == '__main__': m = Manager() # print(m) m_fruit_ls = m.list(["apple","pear","melon"]) print(m_fruit_ls) p1 = Process(target=eat,args=(m_fruit_ls,)) p1.start() p1.join() print(m_fruit_ls) # # 执行结果如下: # ['apple', 'pear', 'melon'] # 先洗洗手... # 开始吃melon # ['apple', 'pear', 'lemon']
浙公网安备 33010602011771号