进程间的数据共享

Posted whylinux

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了进程间的数据共享相关的知识,希望对你有一定的参考价值。

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


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

 

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

进程间的通信-队列/管道以及进程间的数据共享和进程池

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

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

进程间的数据共享

进程间的通讯(IPC)方式

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