जवाबों:
कुछ उपयोग जो मैं भर आया हूँ:
1) एक प्रोग्राम के स्टेट डेटा को डिस्क पर सेव करना ताकि वह फिर से चालू होने पर उसे छोड़ सके जहां वह चल सके (दृढ़ता)
2) बहु-कोर या वितरित प्रणाली (मार्शालिंग) में एक टीसीपी कनेक्शन पर अजगर डेटा भेजना
3) एक डेटाबेस में अजगर वस्तुओं का भंडारण
4) एक मनमानी अजगर वस्तु को एक स्ट्रिंग में परिवर्तित करना ताकि इसे एक शब्दकोश कुंजी (जैसे कैशिंग और ज्ञापन के लिए) के रूप में उपयोग किया जा सके।
पिछले एक के साथ कुछ मुद्दे हैं - दो समान वस्तुओं को चुना जा सकता है और परिणाम अलग-अलग तारों में हो सकते हैं - या यहां तक कि एक ही वस्तु के दो बार अलग-अलग प्रतिनिधित्व हो सकते हैं। ऐसा इसलिए है क्योंकि अचार में संदर्भ गणना की जानकारी शामिल हो सकती है।
@ Lunaryorn की टिप्पणी पर जोर देने के लिए - आपको कभी भी एक अविश्वसनीय स्रोत से एक स्ट्रिंग नहीं खोलनी चाहिए, क्योंकि सावधानीपूर्वक तैयार किया गया अचार आपके सिस्टम पर मनमाने कोड को निष्पादित कर सकता है। उदाहरण के लिए देखें https://blog.nelhage.com/2011/03/exploiting-pickle/
न्यूनतम गोलमटोल उदाहरण ।।
>>> import pickle
>>> a = Anon()
>>> a.foo = 'bar'
>>> pickled = pickle.dumps(a)
>>> unpickled = pickle.loads(pickled)
>>> unpickled.foo
'bar'
संपादित करें: लेकिन अचार के वास्तविक दुनिया के उदाहरणों के सवाल के लिए, शायद अचार का सबसे उन्नत उपयोग (आपको स्रोत में काफी गहरा खुदाई करना होगा) ZODB है: http://svn.zope.org/
अन्यथा, PyPI में कई उल्लेख हैं: http://pypi.python.org/pypi?:action=search&term=pickle&submit=search
मैंने नेटवर्क ट्रांसफ़र प्रोटोकॉल का उपयोग करने में आसान के रूप में नेटवर्क पर भेजी जाने वाली अचार की वस्तुओं के व्यक्तिगत रूप से कई उदाहरण देखे हैं।
वितरित और समानांतर कंप्यूटिंग के लिए अचार पूरी तरह से आवश्यक है।
कहते हैं कि आप समानांतर नक्शा कम करना चाहते थे multiprocessing
(या पाइना के साथ क्लस्टर नोड्स के पार ), तो आपको यह सुनिश्चित करने की आवश्यकता है कि आप जिस समानांतर संसाधन में मैप करना चाहते हैं वह अचार करेगा। यदि यह अचार नहीं करता है, तो आप इसे किसी अन्य प्रक्रिया, कंप्यूटर, आदि पर अन्य संसाधनों के लिए नहीं भेज सकते हैं । एक अच्छा उदाहरण के लिए यहां भी देखें ।
ऐसा करने के लिए, मैं डिल का उपयोग करता हूं , जो कि अजगर में लगभग कुछ भी धारावाहिक कर सकता है। डिल में आपके पास कुछ अच्छे साधन हैं जो आपको यह समझने में मदद करते हैं कि आपके कोड के विफल होने पर क्या आपके अचार को विफल कर रहा है।
और, हाँ, लोग किसी गणना की स्थिति, या आपके ipython सत्र, या जो कुछ भी हो, उसे सहेजने के लिए उठाते हैं ।
मैंने अपने एक प्रोजेक्ट में इसका इस्तेमाल किया है। यदि यह काम करने के दौरान ऐप को समाप्त कर दिया गया था (यह एक लंबा काम था और बहुत सारे डेटा को संसाधित करता है), मुझे ऐप को फिर से चलाने के बाद पूरे डेटा संरचना को बचाने और इसे फिर से लोड करने की आवश्यकता थी। मैंने इसके लिए cPickle का उपयोग किया, क्योंकि गति एक महत्वपूर्ण बात थी और डेटा का आकार वास्तव में बड़ा था।
अचार आपकी डेटा संरचनाओं और कक्षाओं के लिए "सेव अस .." और "ओपन .." जैसा है। मान लीजिए कि मैं अपनी डेटा संरचनाओं को सहेजना चाहता हूं ताकि यह प्रोग्राम रन के बीच लगातार बना रहे।
सहेजा जा रहा है:
with open("save.p", "wb") as f:
pickle.dump(myStuff, f)
लोड हो रहा है:
try:
with open("save.p", "rb") as f:
myStuff = pickle.load(f)
except:
myStuff = defaultdict(dict)
अब मुझे बार-बार खरोंच से मायस्टफ का निर्माण नहीं करना है, और मैं बस ले (ले) कर सकता हूं जहां से मैंने छोड़ा था।
शुरुआती के लिए (जैसा कि मेरे साथ मामला है) यह समझना मुश्किल है कि आधिकारिक दस्तावेज पढ़ते समय पहले स्थान पर अचार का उपयोग क्यों करें । यह शायद इसलिए है क्योंकि डॉक्स का अर्थ है कि आप पहले से ही क्रमबद्धता के पूरे उद्देश्य को जानते हैं। सीरियलाइजेशन के सामान्य विवरण को पढ़ने के बाद ही मैंने इस मॉड्यूल के कारण और इसके सामान्य उपयोग के मामलों को समझा है। किसी विशेष प्रोग्रामिंग भाषा की अवहेलना करने वाले क्रमांकन के व्यापक स्पष्टीकरण भी मदद कर सकते हैं: https://stackoverflow.com/a/14482962/4383472 , क्रमांकन क्या है? , https://stackoverflow.com/a/3984483/4383472
मैं आपको उन उपयोगों के बारे में बता सकता हूं जिनके लिए मैं इसका उपयोग करता हूं और इसके लिए उपयोग किए गए हैं:
उन लोगों को मैं इसे कम से कम के लिए उपयोग कर रहे हैं
मैं उस समय किसी वेबसाइट को स्क्रैप करने के दौरान 8000 से अधिक url स्टोर करना चाहता हूं और जितनी जल्दी हो सके उन्हें प्रोसेस करना चाहता हूं, इसलिए मैं अचार का उपयोग करता हूं क्योंकि इसकी आउटपुट क्वालिटी बहुत अधिक है।
आप आसानी से url तक पहुँच सकते हैं और जहाँ आप नौकरी निर्देशिका को रोकते हैं कुंजी शब्द भी प्रक्रिया को फिर से शुरू करने के लिए बहुत तेज़ी से url विवरण प्राप्त करता है।