进程间的数据共享

# 以后我们会尝试使用数据库类解决现在进程之间的数据共享问题


# multiprocessing.Manager模块,是数据共享用的模块,共享的数据存在数据不安全问题,需要加锁操作


# from multiprocessing import Manager, Process
#
#
# def process1(dic):
#     dic['count'] = 5
#     print('子进程修改了dic')
#
#
# if __name__ == '__main__':
#     m = Manager()   # 创建了一个数据共享的载体
#     dic = m.dict({'count':100}) # 用这个数据共享的载体创建了一个具有进程间数据共享的字典
#     print('主进程的', dic)  # {'count': 100}
#     p = Process(target=process1, args=(dic, ))
#     p .start()
#     p.join()
#     print('主进程的', dic)  # {'count': 5}



# # 多个进程同时修改数据共享的那个数据时,会出现数据不安全性
# # 下面的例子就是模拟多个进程同时修改一个数据共享的的数据,造成数据不安全的问题,解决办法是加锁
#
# from multiprocessing import Manager, Process
#
#
# def process1(dic):
#     dic['count'] -= 1
#     #print('子进程修改了dic')
#
#
# if __name__ == '__main__':
#     m = Manager()   # 创建了一个数据共享的载体
#     dic = m.dict({'count':100}) # 用这个数据共享的载体创建了一个具有进程间数据共享的字典
#     p_lst = []
#     print('主进程的', dic)  # {'count': 100}
#     for i in range(50):
#         p = Process(target=process1, args=(dic, ))
#         p .start()
#         p_lst.append(p)
#     for i in p_lst:
#         i.join()
#     print('主进程的', dic)  # 可能是{'count': 50},也可能是主进程的 {'count': 不定值}


# 多个进程同时修改数据共享的那个数据时,会出现数据不安全性, 解决办法是加锁


from multiprocessing import Manager, Process, Lock


def process1(dic, lock):
    lock.acquire()
    dic['count'] -= 1
    lock.release()
    #print('子进程修改了dic')


if __name__ == '__main__':
    lock = Lock()
    m = Manager()   # 创建了一个数据共享的载体
    dic = m.dict({'count':100}) # 用这个数据共享的载体创建了一个具有进程间数据共享的字典

    p_lst = []
    print('主进程的', dic)  # {'count': 100}
    for i in range(50):
        p = Process(target=process1, args=(dic, lock))
        p .start()
        p_lst.append(p)
    for i in p_lst:
        i.join()
    print('主进程的', dic)  # 可能是{'count': 50},也可能是主进程的 {'count': 不定值}



# 实际上用的多的还是multiprocessing.Queue
    # 但是Queue只能实现一个Python代码启动的进程子进程之间的互相使用
# 而kafak(大数据的消息中间件)、rebbitmq、memcache这些个消息中间件,可以实现跨电脑、跨代码的进程间通信
    # 比如一台服务器上装了一个memcache,一台电脑上的代码可以给这个memcache传递消息,另一台电脑上的代码可以从这个memcache取消息数据

 

转载于:https://www.cnblogs.com/whylinux/p/9825168.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值