python对象序列化或持久化的方法

http://blog.csdn.net/chen_lovelotus/article/details/7233293

一、Python对象持久化方法

目前为止,据我所知,在python中对象持久化有以下几种方法:

1. 使用(dbhash/bsddb, dbm, gdbm, dumbdbm 等)以及它们的"管理器"( anydbm )。只提供了 Python 字 
符串的永久性储存. 提供一个类似字典和文件的对象,可以完成字符串的永久性存储。

2. 使用marshal和pickle来序列化python对象,并具备存储到介质上的功能。两者的区别在于:marshal只能处理简单的Python对象,包括数字、序列、映射、以及代码对象;而pickle还可以处理递归对象,被不同地方多次引用的对象,以及用户定义的类和实例。其中,pickle有一个C语言实现的版本——cPickle,具有更高的效率,建议使用cPickle。

3. 虽然pickle提供非常强大的功能了,已经可以满足我们大部分的需求了,但是,人类的需求是无止境的,光序列化不行啊,只用 pickle 不能解决命名和查找 pickle 文件这样的问题,要是可以对序列化的对象提供管理功能,支持并发访问就好了。因此,人们发明了shelve模块,它是前两者的综合。shelve模块使用anydbm模块寻找合适的DBM模块,然后使用cPickle来完成对象存储转换过程。shelve模块允许对数据库文件进行并发的读访问,但不允许共享读/写访问。

4. 还有一种方案,是在IBM的网站上看到的。那就是ZODB了。ZODB比简单的 pickle 文件更健壮以及更具有可伸缩性。ZODB是一个针对Python的Z对象数据库,是一个健壮的、多用户的和面向对象的数据库系统,它能够存储和管理任意复杂的 Python 对象,并支持事务操作和并发控制。其实,ZODB也依靠Python 的本机序列化能力,而且要有效地使用 ZODB,必须充分了解 pickle。

5. 最后一只知道的解决持久性问题的方法是 Prevayler,PyPerSyst 将整个对象系统保存在内存中,并通过不时地将系统快照 pickle 到磁盘以及维护一个命令日志(通过此日志可以重新应用最新的快照)来提供灾难恢复。所以,尽管使用 PyPerSyst 的应用程序受到可用内存的限制,但好处是本机对象系统可以完全装入到内存中,因而速度极快,而且实现起来要比如 ZODB 这样的数据库简单,ZODB 允许对象的数目比同时在能内存中所保持的对象要多。

背景知识:它最初是用 Java 实现的。后来,一群 Python 程序员将 Prevayler 移植到了 Python 上,另起名为 PyPerSyst,由 SourceForge 托管。Prevayler/PyPerSyst 概念也是建立在 Java 和 Python 语言的本机序列化能力之上。

6. 我今天又发现了一个模块Durus,非常好的模块,支持多线程并发操作,支持回滚操作。不过安装的时候没装上,好像是缺少vc里面文件似的,不管了。

二、我该如何选择

上面5种方案是我在综合相关资料汇总的,那么现在轮到如何选择。我选择的一个原则:“懒”,怎么讲,就是尽量在完成任务的情况下,降低复杂度和将来的兼容性。第五种方案对我不太适用,全部load到内存基本不可能,所以我先暂时选第四种方案吧,方便读取,使用对象数据库对于我的项目应该是有好处的。

参考性的意见,我认为得看自己定了,如果想简单,用pickle就能解决问题。我也想用pickle的,可是一大堆对象,还需要检索方便,当然选择第四种方案。其实第三种方案也适合我的,如果时间充裕的话,我还想第四种方案和第三种做一个实验,比较一下,再写一篇文章给大家参考。

参考资料:

1. Python 持久性管理 http://www.ibm.com/developerworks/cn/linux/l-pypers/

2. shelve — Python object persistence http://docs.python.org/library/shelve.html

3. Core Python Programming, Second Edition   By Wesley J. Chun

4. ZODB 入门 http://www.ibm.com/developerworks/cn/aix/library/au-zodb/?S_TACT=105AGX52&S_CMP=tec-csdn

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/276321.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Windows Live Writer 在win2003 的安装方法

下载Windows Live Writer整体安装包,最好是离线安装包 2.在xp系统上安装 3.查找C:\Program Files\Common Files\Windows Live\.cache目录 .cache目录是隐藏的,目录下面就是各个安装文件的msi安装包 4.拷贝相应的msi文件,到Windows 2003安装就…

decode 大于比较 小于_6 燃气输配系统6.3 压力不大于1.6Mpa的室外燃气管道城镇燃气设计规范 GB500282006(2020修订版)...

6.3 压力不大于1.6Mpa的室外燃气管道6.3.1中压和低压燃气管道宜采用聚乙烯管、机械接口球墨铸铁管、钢管或钢骨架聚乙烯塑料复合管,并应符合下列要求: 1 聚乙烯燃气管应符合现行的国家标准《燃气用埋地聚乙烯管材》GB15558.1 和《燃气用埋地聚乙烯管件…

若川的2017年度总结,一如既往

可以点击上方的标签若川的故事、年度总结,查看往期文章有读者反馈说看我年度总结系列比我源码系列更有启发。所以打算把2016-2018的年度总结发布到公众号声明原创,希望对大家有所启发。(虽然我的每一年都过得非常普通...)若川的20…

MIME协议及源邮件格式分析

转载链接:http://wenku.baidu.com/view/7246de671ed9ad51f01df277.html 电子邮件也许是一个Internet上的流行最广泛的应用。也是我们现在的大多数网络办公流程的基础。各种邮件服务器很多,但都大都遵循以1982年出版的RFC822--《ARPA网络文本信息格式标准(STANDARD F…

沟通:用故事产生共鸣

《沟通:用故事产生共鸣》(全彩) 基本信息作者: Nancy Duarte(南希.杜瓦特)译者: 冯海洋出版社:电子工业出版社ISBN:9787121195914上架时间:2013-4-1出版日期:2013 年3月开本:12开页码&#xff1…

合工大五套卷_2020合工大超越数一五套卷第一套感想

合工大的卷子确实不错,题目给我的感觉是题干包装的看起来就很难,但是写起来还是一样的套路。计算上要难一些,需要细心点选择题:1.可去间断点的定义和泰勒公式2.这个题我用排除法写的,可微的话连续和偏导存在都成立了,然…

DotNet关键知识点——WPF篇(一)(范德成编辑批注版)

1. Journal 的使用 Journal 用于在 XAML 浏览器应用程序(XBAP)中维护历史访问页。删除前一访问页只需调当前 NavigationService 对象的 RemoveBackEntry() 即可;而增加一个访问页则复杂得多: 1) 实现一个 CustomContentState 的派…

若川的2018年度总结,平淡无奇

可以点击上方的标签若川的故事、年度总结,查看往期文章偷偷告诉你,公众号内回复【报告】,可以获取你自己的github 2020 年度报告昨晚在我的6个微信群里都发了红包,以这样的方式跨过了2020年。运营公众号真的挺难的,比如…

Simple TCP Server Client Socket C

转载链接&#xff1a;http://blog.163.com/caipeipei_love126/blog/static/2596603220101118433940/ tcpserver.c #include<stdlib.h> #include<stdio.h> #include<errno.h> #include<string.h> #include<netdb.h> #include<sys/types.h>…

基于dnn的车牌识别_自然场景中文文字识别,身份证火车票都能识别

图像处理中OCR(Optical Character Recognition光学字符识别)场景非常多&#xff0c;也给大家的工作生活带来了很多便利&#xff0c;比如车牌识别就能管理停车场车辆的出入&#xff0c;快递时只需给一个带有快递信息的图就能自动解析上传发件信息和收件信息&#xff0c;再比如我…

年末的大厂前端面试总结(20届双非二本)-终入字节

关注若川视野, 回复"pdf" 领取资料&#xff0c;回复"1"&#xff0c;可加群长期交流学习自我介绍双非二本,软件工程,自学前端,今年毕业。喜欢编程,古风,日语和英语。常以冷月心之名混迹前端江湖,也曾在混迹网文圈时用冷月心做笔名签约掌阅,作品《清起风云》…

面试题(转的)

第一组   1.烧一根不均匀的绳&#xff0c;从头烧到尾总共需要1个小时。现在有若干条材质相同的绳子&#xff0c;问如何用烧绳的方法来计时一个小时十五分钟呢?  2.你有一桶果冻&#xff0c;其中有黄色、绿色、红色三种&#xff0c;闭上眼睛抓取同种颜色的两个。抓取多少个…

python三酷猫_洛克王国三代酷猫登场 冰水酷猫解析

洛克王国三代酷猫登场 冰水酷猫解析 洛克王国三代武斗酷猫解析三代水灵&#xff0c;在哥斯拉的倾情推荐下&#xff0c;小洛克们都已经很熟悉了吧&#xff01;那和水灵同一期出现的帅哥——武斗酷猫&#xff0c;如果三代遗传了&#xff0c;会怎么样呢&#xff1f;小洛克们一起来…

Linux禁止用户登录

转载链接&#xff1a;http://blog.sina.com.cn/s/blog_4cebadd10100a9bl.html 我们在做系统维护的时候&#xff0c;希望个别用户或者所有用户不能登录系统&#xff0c;保证系统在维护期间正常运行。这个时候我们就要禁止用户登录。 1、禁止个别用户登录。比如禁止lynn用户登录…

.NET常用功能和代码[总结与收藏]

1. 打开新的窗口并传送参数&#xff1a; 传送参数&#xff1a;response.write("<script>window.open(*.aspx?id"this.DropDownList1.SelectIndex"&id1"...")</script>") 接收参数&#xff1a;string a Request.QueryString(&q…

topcoder srm 305 div1

problem1 link 直接按照题意模拟即可。 import java.util.*; import java.math.*; import static java.lang.Math.*;public class UnfairDivision {public int albertsShare(int[] assets) {final int nassets.length;for(int i1;i<n;i) {assets[i]assets[i-1];}int result0…

动图演示23个鲜为人知的VSCode快捷键

原文地址&#xff1a;https://dev.to/devmount/23-lesser-known-vs-code-shortcuts-as-gif-80尽管我在VS Code中经常使用许多快捷方式&#xff0c;以下快捷方式可能会派上用场&#xff0c;但我经常忘记它们的存在。我制作了一些GIF&#xff0c;以便更好地记住它们。也许这里面也…

使用C语言进行面向对象的开发--GObject入门[5]

转载请注明出处 blog.csdn.net/pingf0 或www.cnblogs.com/pingf 接上文这一部分简要介绍下类的析构&#xff0c;或者成为终结。还是多说几句&#xff0c;也算是对前文的补充1.生成一个类是由父到子&#xff0c;析构的时候自然与之相对是由子到父。2.GObject的内存管理并没有采用…

python结课报告_Python数据分析课程到底是学什么内容的?

2020年12月4日&#xff0c;博为峰旗下学掌门召开了《Python 商业(大)数据分析师》新课程发布会。据悉&#xff0c;此次发布会上发布的《Python 商业(大)数据分析师》课程是在原《数据分析师》课程上进行了全面升级。在发布会上博为峰副总经理王琰表示&#xff0c;在未来学掌门作…