Python网编_进程间的数据共享

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。
原文地址:https://www.cnblogs.com/gzying-01/p/10375218.html