码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2019-02-14 16:28:19      阅读:182      评论:0      收藏:0      [点我收藏+]

标签:port   需要   如何   process   ==   个数   不用   targe   app   

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网编_进程间的数据共享

标签:port   需要   如何   process   ==   个数   不用   targe   app   

原文地址:https://www.cnblogs.com/gzying-01/p/10375218.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!