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.pswp.cn/news/276321.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/276321.shtml
英文地址,請注明出處:http://en.pswp.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;在未來學掌門作…