进程间的数据共享

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


# 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取消息数据

 

posted @ 2018-10-21 15:24  _小溢  阅读(211)  评论(0编辑  收藏  举报