Python中 pickle有什麼意義,pickle了再恢複?

來源:互聯網
上載者:User
Python初級

回複內容:

謝邀。
很多入門教程裡講解序列化一般是這個流程:
對象1 -- 序列化 -> 位元組串 -- 還原序列化 -> 對象2
所以很多人並不知道為什麼要序列化。

估計很多人都有耳聞 Python 在處理計算密集型的任務時效能不好,一般不能充分使用多核 CPU 的優勢,這時候會使用多進程來最佳化。
有一種多進程的計算方式是這樣的,進程分為 master 和 worker,master 負責調度任務,worker 則專於計算,比如 Celery 這個庫。
那麼問題來了,master 中產生了一個任務需要交給 worker 來計算,因為進程之間記憶體是隔離的,worker 不能直接存取到這個任務對象。
所以 master 需要以某種方式將這個對象表示出來傳遞給 worker,而且 worker 能夠根據這個表示方式來構造出這個對象(的替身),這個過程就是序列化和還原序列化。
而 pickle 是 Python 內部的一種序列化方式,對 Python 對象有很好的支援,而這個原因也正是 Celery 預設使用 pickle 的原因,Is Celery dependent on pickle?
從序列化的角度來看,pickle 的方案和 JSON,YAML,XML 等沒有本質的區別。
不過 pickle 的安全性不足,永遠不要還原序列化不可信來源的 pickle 位元組串,因此 pickle 方案不適合用於網路通訊。謝邀。pickle能把幾乎任何格式(全部內建類型+支援pickle的類執行個體)的變數用字串表示,通常被用來儲存中間結果。

這是什麼意思呢?舉個例子,有一天你寫了要跑很長時間的程式,於是你決定增加【把當前進度儲存到檔案】這個功能,這樣今天跑不完的話,明天還能讀取存檔繼續今天的進度。

不過問題來了:“當前進度”不一定是一個字串,可能是一個列表,或者字典,或者集合,甚至一個類的執行個體……這樣亂七八糟的東西如何寫到檔案裡?

於是pickle就有用了。

>>> import pickle>>> data = {...   '1': True,...   23.45: str,...   print: set(),...   b'hello': [0,0,0],... }>>> pickle.dumps(data)b'\x80\x03}q\x00(G@7s33333cbuiltins\nstr\nq\x01cbuiltins\nprint\nq\x02cbuiltins\nset\nq\x03]q\x04\x85q\x05Rq\x06X\x01\x00\x00\x001q\x07\x88C\x05helloq\x08]q\t(K\x00K\x00K\x00eu.'>>> pickle.loads(_){23.45: , : set(), '1': True, b'hello': [0, 0, 0]}
玩過遊戲嗎?知道 Save/Load 嗎?python內建的file函數只能儲存和讀取字串格式的資料.
pickle可以儲存和讀取成其他格式比如list dict的資料,這叫做序列化和還原序列化,把你的資料結構轉換成字串 ,可以儲存到檔案,方便下次快速恢複,也可以通過網路傳輸之前寫爬蟲的時候……一不小心就寫崩了……當時沒用資料庫,就是用這貨自動回復的。比如說要構建機器學習模型的時候,就說決策樹吧,一般情況下決策樹模型都是先建樹,然後剪枝,然後做預測,但這樣有個不好的地方就是,明明是同一棵樹上跑測試資料,但是每次都要重建立一次樹,而決策樹的大部分時間就浪費在建樹了,所以我可以在第一次完整跑的時候用pickle把整個樹儲存起來,以後再跑測試的時候直接load進來預測或剪枝就好了,這樣做節省了大量的時間。序列化的時候有用,需要用到序列化的情境有session等在其他部分進階語言裡面,將對象序列化是個麻煩的事情,你要將對象自行編碼,分割成串,然後存入檔案。反向序列化,即讀取,恢複成對象時,要解碼,截取串,還原成對象。有了pickle這玩意,依靠dump和load,就可以輕鬆實現。說的直白一點,就是一個儲存和擷取的工具,pickle把Python的資料結構用另外一種簡單的形式儲存到檔案中,然後方便轉移和傳播,然後在用同一樣的方法還原回去。
  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.