数据共享Manager

将数据设置成共享数据,一个进程修改了数据,另外一个进程就能就接受的被修改的数据。

起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'])
原文地址:https://www.cnblogs.com/aaronthon/p/9833519.html