Manager提供了很多数据共享机制,但是对于一些基础数据类型来说,是数据不安全的,那么Q:如何解决呢?
A: 需要我们自己手动加锁
from multiprocessing import Manager,Process,Lock # Process开子进程用,Lock数据加锁用,Manager进程间数据共享用 def work(d,lock): # lock.acquire() # d['count'] -= 1 # lock.release() with lock: # 上下问管理 注意了lock锁的并不是'count'这个数据 而是d['count'] -= 1这句代码 d['count'] -= 1 # 这句之前的上文是lock.acquire()下文是lock.release() if __name__ == '__main__': lock = Lock() m = Manager() # 实例化一个m dic = m.dict({'count':100}) # 调用m的dict方法 p_l = [] for i in range(100): p = Process(target=work,args=(dic,lock)) p.start() p_l.append(p) for p in p_l: p.join() print(dic) 执行结果: 0
进程间默认是数据隔离的,所以一般不会写数据共享,即使要写,使用队列的数据安全性更好一些,一般不用Manager。