将数据设置成共享数据,一个进程修改了数据,另外一个进程就能就接受的被修改的数据。
起50个进程让他们都去操作一个数据:
from multiprocessing import Process, Manager def func(m): m['dic'] -= 1 if __name__ == "__main__": m = Manager() dic = m.dict({'dic':100}) p_list = [] for i in range(50): p = Process(target=func, args=(dic,)) p.start() p_list.append(p) for i in p_list: i.join() print(dic['dic'])
多运行几次发现,结果有时是50,有时是53,有时是57等等。。。
为什么会出现这个结果,因为一个88被一个进程拿到要去修改还没修改时被其他进程拿到,然后这个进程将数据修改成87并写入字典,另外一个进程也就改成87并写入字典,这就导致数据不安全,解决办法加锁就可以了。
from multiprocessing import Process, Manager, Lock def func(m, lock): lock.acquire() m['dic'] -= 1 lock.release() if __name__ == "__main__": lock = Lock() m = Manager() dic = m.dict({'dic':100}) p_list = [] for i in range(50): p = Process(target=func, args=(dic, lock)) p.start() p_list.append(p) for i in p_list: i.join() print(dic['dic'])