2012-09-27 16 views
15

पृष्ठभूमि: मैं बस विज्ञान-सीखने के साथ शुरू कर रहा हूं, और पेज के निचले हिस्से में joblib, versus pickle के बारे में पढ़ रहा हूं।जॉबलिब बनाम अचार के विभिन्न उपयोग के मामले क्या हैं?

यह अचार की joblib की जगह (joblib.dump & joblib.load) है, जो बड़े डेटा के बारे में अधिक कुशल है उपयोग करने के लिए और अधिक दिलचस्प हो सकता है, लेकिन केवल डिस्क के लिए अचार और एक स्ट्रिंग के लिए नहीं कर सकते हैं

मैंने यह क्यू & ए पिकल पर 0,Common use-cases for pickle in Python पढ़ा और आश्चर्य किया कि क्या समुदाय जॉबलिब और अचार के बीच अंतर साझा कर सकता है? किसी को एक दूसरे से कब उपयोग करना चाहिए?

उत्तर

18

जॉबलिब आमतौर पर बड़े numpy arrays पर काफी तेज है क्योंकि यह numpy डेटास्ट्रक्चर के सरणी बफर के लिए एक विशेष हैंडलिंग है। कार्यान्वयन विवरण के बारे में जानने के लिए आप source code पर एक नज़र डाल सकते हैं। यह zlib का उपयोग करते हुए मक्खी पर उस डेटा को भी संपीड़ित कर सकता है।

जॉबलिब भी इसे लोड करते समय एक असम्पीडित जॉबलिब-मसालेदार numpy सरणी के डेटा बफर को मेमोरी करना संभव बनाता है जिससे प्रक्रियाओं के बीच स्मृति साझा करना संभव हो जाता है।

+0

बहुत बहुत धन्यवाद! यह सहायक है। – msunbot

1

मैं एक ही सवाल भर में आया था, इसलिए मैं इस एक कोशिश की के रूप में मैं एक बड़े अचार फ़ाइल को लोड करने की आवश्यकता है

इस के लिए
#comapare pickle loaders 
from time import time 
import pickle 
import os 
try: 
    import cPickle 
except: 
    print "Cannot import cPickle" 
import joblib 

t1 = time() 
lis = [] 
d = pickle.load(open("classi.pickle","r")) 
print "time for loading file size with pickle", os.path.getsize("classi.pickle"),"KB =>", time()-t1 

t1 = time() 
cPickle.load(open("classi.pickle","r")) 
print "time for loading file size with cpickle", os.path.getsize("classi.pickle"),"KB =>", time()-t1 

t1 = time() 
joblib.load("classi.pickle") 
print "time for loading file size joblib", os.path.getsize("classi.pickle"),"KB =>", time()-t1 

आउटपुट

time for loading file size with pickle 1154320653 KB => 6.75876188278 
time for loading file size with cpickle 1154320653 KB => 52.6876490116 
time for loading file size joblib 1154320653 KB => 6.27503800392 

है इस joblib के अनुसार cPickle की तुलना में बेहतर काम करता है और इन 3 मॉड्यूल से अचार मॉड्यूल। धन्यवाद

+1

मैंने सोचा कि सीपीकल अचार की तुलना में तेज़ होना चाहिए? – Echo

+0

क्या यह बेंचमार्क पायथन 3 के साथ किया गया है, जो डिफ़ॉल्ट रूप से अचार (प्रोटोकॉल = 3) का उपयोग करता है (जो कि python2 में डिफ़ॉल्ट से तेज है)? – LearnOPhile

+0

यह पायथन 2.7 के साथ किया गया था – Gunjan

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