进程间数据共享 (multiprocess.Manager)
2024-10-08 18:52:01
进程间数据共享 (multiprocess.Manager)
一、进程之间的数据共享
展望未来,基于消息传递的并发编程是大势所趋
即便是使用线程,推荐做法也是将程序设计为大量独立的线程集合,通过消息队列交换数据。
这样极大地减少了对使用锁定和其他同步手段的需求,还可以扩展到分布式系统中。
但进程间应该尽量避免通信,即便需要通信,也应该选择进程安全的工具来避免加锁带来的问题。
以后我们会尝试使用数据库来解决现在进程之间的数据共享问题。
1.1 Manager模块介绍
进程间数据是独立的,可以借助于队列或管道实现通信,二者都是基于消息传递的。
虽然进程间数据独立,但可以通过Manager实现数据共享,事实上Manager的功能远不止于此。
A manager object returned by Manager() controls a server process which holds Python objects and allows other processes to manipulate them using proxies.
A manager returned by Manager() will support types list, dict, Namespace, Lock, RLock, Semaphore, BoundedSemaphore, Condition, Event, Barrier, Queue, Value and Array.
1.2 Manager例子
from multiprocessing import Manager,Process,Lock
def work(d,lock):
with lock: # 不加锁而操作共享的数据,肯定会出现数据错乱
d['count']-=1
if __name__ == '__main__':
lock=Lock()
with Manager() as m:
dic=m.dict({'count':100})
p_l=[]
for i in range(100):
p=Process(target=work,args=(dic,lock))
p_l.append(p)
p.start()
for p in p_l:
p.join()
print(dic)
{'count': 0}
最新文章
- 【ubuntu 】常见错误--Could not get lock /var/lib/dpkg/lock
- MySQL数据库学习笔记(二)----MySQL数据类型
- MySQL 库大小、表大小、索引大小查询命令
- 获取View的高度宽度,屏幕参数,状态栏高度
- activemq重启
- YUI 之yui.js
- form 练习
- CSS+DIV标签命名规范 搜索引擎最喜欢
- 【Linux探索之旅】第一部分第六课:Linux如何安装在虚拟机中
- 安卓TV开发(五) 移动智能终端UI之实现主流TV焦点可控UI
- mysql 一张表的数据插入另一张表的sql语句
- AI deeplab
- Linux驱动
- 【python-dict】dict的使用及实现原理
- 分数拆分(Fractions Again?!, UVa 10976)
- oracleXE数据库没有公开wm_concat函数, 需要手动添加
- CF 463D Gargari and Permutations [dp]
- inline-block元素的空白间距解决方法<;转>;
- 借助CustomBehaviorsLibrary.dll写出水印效果(转)
- 钉钉 E应用 打开分享外链