Câu trả lời:
Một số cách sử dụng mà tôi đã bắt gặp:
1) lưu dữ liệu trạng thái của chương trình vào đĩa để nó có thể tiếp tục ở nơi nó bị tắt khi khởi động lại (kiên trì)
2) gửi dữ liệu python qua kết nối TCP trong hệ thống đa lõi hoặc phân tán (sắp xếp theo thứ tự)
3) lưu trữ các đối tượng python trong cơ sở dữ liệu
4) chuyển đổi một đối tượng python tùy ý thành một chuỗi để nó có thể được sử dụng làm khóa từ điển (ví dụ: để lưu vào bộ nhớ cache & ghi nhớ).
Có một số vấn đề với cái cuối cùng - hai đối tượng giống hệt nhau có thể được chọn và dẫn đến các chuỗi khác nhau - hoặc thậm chí cùng một đối tượng được ngâm hai lần có thể có các cách biểu diễn khác nhau. Điều này là do dưa chua có thể bao gồm thông tin đếm tham chiếu.
Để nhấn mạnh nhận xét của @ lunaryorn - bạn không bao giờ nên tháo chuỗi từ một nguồn không đáng tin cậy, vì một dưa chua được làm cẩn thận có thể thực thi mã tùy ý trên hệ thống của bạn. Ví dụ: xem https://blog.nelhage.com/2011/03/Exloiting-pickle/
Ví dụ khứ hồi tối thiểu ..
>>> import pickle
>>> a = Anon()
>>> a.foo = 'bar'
>>> pickled = pickle.dumps(a)
>>> unpickled = pickle.loads(pickled)
>>> unpickled.foo
'bar'
Chỉnh sửa: nhưng đối với câu hỏi về các ví dụ về dưa chua trong thế giới thực, có lẽ cách sử dụng dưa chua tiên tiến nhất (bạn phải đào sâu vào nguồn) là ZODB: http://svn.zope.org/
Mặt khác, PyPI có đề cập đến một số: http://pypi.python.org/pypi?:action=search&term=pickle&submit=search
Cá nhân tôi đã thấy một số ví dụ về các đối tượng ngâm được gửi qua mạng như một giao thức truyền mạng dễ sử dụng.
Pickling là hoàn toàn cần thiết cho tính toán phân tán và song song.
Giả sử bạn muốn thực hiện giảm bản đồ song song với multiprocessing
(hoặc trên các nút cụm với pyina ), thì bạn cần đảm bảo chức năng bạn muốn ánh xạ qua các tài nguyên song song sẽ được xử lý. Nếu nó không được chọn, bạn không thể gửi nó đến các tài nguyên khác trên một quy trình khác, máy tính, v.v. Cũng xem ở đây để xem một ví dụ tốt.
Để làm điều này, tôi sử dụng thì là , có thể tuần tự hóa hầu hết mọi thứ trong python. Dill cũng có một số công cụ tốt để giúp bạn hiểu điều gì đang khiến cho việc tẩy rửa của bạn thất bại khi mã của bạn bị lỗi.
Và, vâng, mọi người sử dụng tính năng chọn để lưu trạng thái của phép tính hoặc phiên ipython của bạn hoặc bất cứ điều gì.
Tôi đã sử dụng nó trong một trong những dự án của tôi. Nếu ứng dụng bị chấm dứt trong khi nó hoạt động (nó đã thực hiện một nhiệm vụ dài và xử lý nhiều dữ liệu), tôi cần lưu toàn bộ cấu trúc dữ liệu và tải lại sau khi ứng dụng được chạy lại. Tôi đã sử dụng cPickle cho việc này, vì tốc độ là một điều rất quan trọng và kích thước của dữ liệu thực sự lớn.
Pickle giống như "Save As .." và "Open .." cho các cấu trúc dữ liệu và các lớp của bạn. Giả sử tôi muốn lưu cấu trúc dữ liệu của mình sao cho liên tục giữa các lần chạy chương trình.
Tiết kiệm:
with open("save.p", "wb") as f:
pickle.dump(myStuff, f)
Đang tải:
try:
with open("save.p", "rb") as f:
myStuff = pickle.load(f)
except:
myStuff = defaultdict(dict)
Bây giờ tôi không phải xây dựng myStuff từ đầu nữa và tôi chỉ có thể chọn (le) từ nơi tôi rời đi.
Đối với người mới bắt đầu (như trường hợp của tôi) thật khó hiểu tại sao sử dụng dưa chua ở nơi đầu tiên khi đọc tài liệu chính thức . Có thể bởi vì các tài liệu ngụ ý rằng bạn đã biết toàn bộ mục đích của tuần tự hóa. Chỉ sau khi đọc mô tả chung về tuần tự hóa, tôi mới hiểu lý do của mô-đun này và các trường hợp sử dụng phổ biến của nó. Ngoài ra các giải thích rộng rãi về tuần tự hóa bỏ qua một ngôn ngữ lập trình cụ thể có thể giúp ích: https://stackoverflow.com/a/14482962/4383472 , Tuần tự hóa là gì? , https://stackoverflow.com/a/3984483/4383472
Tôi có thể cho bạn biết những công dụng tôi sử dụng và đã thấy nó được sử dụng cho:
Đó là những cái tôi sử dụng ít nhất
Tôi sử dụng tẩy trong quá trình web loại bỏ một trang web tại thời điểm đó tôi muốn lưu trữ hơn 8000k url và muốn xử lý chúng nhanh nhất có thể vì vậy tôi sử dụng tẩy rửa vì chất lượng đầu ra của nó rất cao.
bạn có thể dễ dàng tiếp cận với url và nơi bạn dừng ngay cả từ khóa thư mục công việc cũng lấy chi tiết url rất nhanh để tiếp tục quá trình.