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

Posted 码码忽忽

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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。

以上是关于Python网编_进程间的数据共享的主要内容,如果未能解决你的问题,请参考以下文章

Python多进程-进程间数据的共享

python全栈开发day33-进程间的通信进程间的数据共享,进程池

Python网编_进程之间的数据隔离

Python之路,day11-Python基础

python全栈开发,Day40(进程间通信(队列和管道),进程间的数据共享Manager,进程池Pool)

Python之路(第三十九篇)管道进程间数据共享Manager