博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
进程间的数据共享
阅读量:5923 次
发布时间:2019-06-19

本文共 1984 字,大约阅读时间需要 6 分钟。

# 以后我们会尝试使用数据库类解决现在进程之间的数据共享问题# 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, Lockdef 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

你可能感兴趣的文章
JS 判断页面浏览器类型
查看>>
go httpclient
查看>>
scala基础续
查看>>
oracle在group by中汇总列
查看>>
Node.js应用层框架Bearcat概述
查看>>
mac下无make命令解决方法
查看>>
海外项目点滴事件
查看>>
SCSI/SAS/FC/SATA Disks Performance Data
查看>>
iOS开发笔记
查看>>
C/C++拾遗(一)递归和栈逆序字符串
查看>>
iOS曝严重安全漏洞 尽快升级至iOS 9.3.5
查看>>
【FastJSON】解决FastJson中“$ref 循环引用”的问题
查看>>
给 ANDROID 初学者的 GRADLE 知识普及
查看>>
php设计模式之单例模式的实例代码
查看>>
移动端拖拽排序
查看>>
Linux vmstat命令实战详解
查看>>
C#获取所有SQL Server的数据库实例名称
查看>>
前端javascript学习
查看>>
ubuntu中如何将终端添加到右键
查看>>
Nginx + php-fpm 开启 PATH_INFO 模式
查看>>