2012-01-23 18 views
63

मुझे समझ में आया कि पायथन पिकलिंग एक पायथन ऑब्जेक्ट को 'स्टोर' करने का एक तरीका है जो ऑब्जेक्ट प्रोग्रामिंग का सम्मान करता है - txt फ़ाइल या डीबी में लिखे गए आउटपुट से अलग है।पायथन serialization - क्यों अचार?

  • जहां वस्तुओं मसालेदार कर रहे हैं 'संग्रहीत':

    आपको और अधिक जानकारी या निम्नलिखित बातों पर संदर्भ है?

  • डीबी में भंडारण, कहने, ऑब्जेक्ट प्रतिनिधित्व को संरक्षित करने के लिए क्यों पिकलिंग है?
  • क्या मैं एक पायथन शेल सत्र से दूसरे में मसालेदार वस्तुओं को पुनर्प्राप्त कर सकता हूं?
  • क्या आपके पास क्रमिकरण उपयोगी होने पर महत्वपूर्ण उदाहरण हैं?
  • अचार के साथ क्रमिकरण डेटा 'संपीड़न' करता है?

दूसरे शब्दों में, मैं अचार बनाने पर कोई दस्तावेज़ रहा हूँ - Python.doc कैसे अचार लागू करने के लिए, लेकिन का उपयोग करें और क्रमबद्धता की आवश्यकता के बारे में विवरण में गोता नहीं लगता बताते हैं।

+0

बाद में बहाली के लिए राज्य को बचाने या किसी ऑब्जेक्ट को एक अलग पायथन रनटाइम पर साझा/प्रतिलिपि बनाने के लिए मेरा अनुमान होगा। – synthesizerpatel

+12

सीरियलाइजेशन पर विकिपीडिया के लेख द्वारा आपके कई प्रश्नों का उत्तर दिया गया है: http://en.wikipedia.org/wiki/Serialization – NPE

+5

क्या आप पूछ रहे हैं कि मुझे पाइथन में क्रमबद्धता के लिए अचार की आवश्यकता क्यों होगी? _ या बल्कि _ क्या है (इसका उद्देश्य) सब के बाद serialization? _। – moooeeeep

उत्तर

78

पिकलिंग एक पाइथन ऑब्जेक्ट (सूची, निर्देश, आदि) को एक चरित्र धारा में बदलने का एक तरीका है। विचार यह है कि इस चरित्र धारा में अन्य पाइथन लिपि में वस्तु को पुनर्निर्माण के लिए आवश्यक सभी जानकारी शामिल है।

जहां मसालेदार जानकारी संग्रहीत किया जाता है का सवाल है, आम तौर पर एक करना होगा:

with open('filename', 'wb') as f: 
    var = {1 : 'a' , 2 : 'b'} 
    pickle.dump(var, f) 

दैट 'फ़ाइल नाम' फ़ाइल में हमारे var dict की मसालेदार संस्करण संग्रहीत करेंगे। फिर, किसी अन्य लिपि में, तो आप इस फ़ाइल से एक चर में लोड कर सकता है और शब्दकोश निर्मित किया जाएगा:

with open('filename','rb') as f: 
    var = pickle.load(f) 

अचार बनाने के लिए एक और उपयोग करता है, तो आप एक नेटवर्क (शायद सॉकेट या कुछ और के साथ खत्म हो गया इस शब्दकोश संचारित करने के लिए की जरूरत है ।) आपको पहले इसे एक चरित्र धारा में बदलने की जरूरत है, फिर आप उसे सॉकेट कनेक्शन पर भेज सकते हैं।

इसके अलावा, यहां बात करने के लिए कोई "संपीड़न" नहीं है ... यह एक प्रतिनिधित्व (रैम में) से दूसरे में ("पाठ" में) रूपांतरित करने का एक तरीका है।

के पास here पिकलिंग का एक अच्छा परिचय है।

+2

आम तौर पर एक 'खुले (' फ़ाइल नाम ') के साथ एफ के रूप में करेगा: ... ' – moooeeeep

+0

आह हाँ ... यह अधिक त्रुटि प्रतिरोधी है। धन्यवाद। – austin1howard

+3

इसके अलावा, आपको 'खुले (फ़ाइल नाम,' wb ') के साथ f: ...' के रूप में करना होगा या आप फ़ाइल में लिखने में सक्षम नहीं होंगे। –

29

पिकलिंग वितरित और समांतर कंप्यूटिंग के लिए बिल्कुल जरूरी है।

कहें कि आप multiprocessing (या pyina के साथ क्लस्टर नोड्स में) के साथ समानांतर मानचित्र करना चाहते हैं, तो आपको यह सुनिश्चित करना होगा कि आप समानांतर संसाधनों में मैप किए गए फ़ंक्शन को अचार लेंगे। यदि यह अचार नहीं करता है, तो आप इसे किसी अन्य प्रक्रिया, कंप्यूटर इत्यादि पर अन्य संसाधनों में नहीं भेज सकते हैं। उदाहरण के लिए here भी देखें।

ऐसा करने के लिए, मैं dill का उपयोग करता हूं, जो पाइथन में लगभग कुछ भी क्रमबद्ध कर सकता है। डिल में some good tools भी है जो आपको समझने में मदद करता है कि आपका कोड विफल होने पर आपकी पिकलिंग विफल हो रही है।

और, हाँ, लोग गणना की स्थिति को बचाने के लिए चुनते हैं, या आपके ipython सत्र, या जो भी हो। यदि आप चाहें तो bz2 या gzip के साथ संपीड़न करने के लिए आप अचार के पिकलर और अनपिकलर को भी बढ़ा सकते हैं।

संबंधित मुद्दे