2015-12-16 17 views
14

मैं अनुक्रमित डेटा का विश्लेषण करने के लिए पायथन/पायम का उपयोग कर रहा हूं। अपने ट्यूटोरियल में (pysam - An interface for reading and writing SAM files) कमांड साथी के लिए यह कहता है:कैश कैश कैसे करें?

'यह विधि उच्च-थ्रूपुट प्रोसेसिंग के लिए बहुत धीमी है। यदि किसी पाठ को अपने साथी के साथ संसाधित करने की आवश्यकता है, तो एक पठन नाम से फ़ाइल को क्रमबद्ध करें या बेहतर, कैश पढ़ता है। '

आप कैश कैसे पढ़ेंगे?

उत्तर

9

Caching लंबे समय तक चलने वाले संचालन को गति देने के लिए एक सामान्य दृष्टिकोण है। यह कम्प्यूटेशनल गति के लिए स्मृति बलिदान करता है।

मान लीजिए कि आपके पास एक ऐसा फ़ंक्शन है जो पैरामीटर का एक सेट हमेशा एक ही परिणाम देता है। दुर्भाग्यवश यह फ़ंक्शन बहुत धीमा है और आपको इसे अपने प्रोग्राम को धीमा करने में काफी समय लगाना होगा।

आप क्या कर सकते हैं, सीमित मात्रा में {पैरामीटर: परिणाम} संयोजन संग्रहीत कर रहे हैं और किसी भी समय फ़ंक्शन को उसी पैरामीटर के साथ बुलाया जाता है।

यह एक गंदे चाल है लेकिन काफी प्रभावी है, खासकर अगर पैरामीटर संयोजन की तुलना में पैरामीटर संयोजन कम है।

पायथन 3 में इस उद्देश्य के लिए decorator है।
पायथन 2 में library मदद कर सकता है लेकिन आपको थोड़ा और काम चाहिए। , आप एक वस्तु एक फ़ाइल की तरह इंटरफ़ेस का समर्थन करता है कि आपूर्ति कर सकते हैं तरीकों seek, read यानी एक फ़ाइल नाम की आपूर्ति के बजाय

filepath_or_object

:

3

AlignmentFile पहले तर्क के रूप में लेता है , tell। इसके लिए कक्षा को कार्यान्वित करते समय, आप रीड पर कैशिंग को भी कार्यान्वित कर सकते हैं, जो कि वर्तमान कर्सर स्थिति पर निर्भर होना है।

तो फ़ाइल आकार काफी छोटा इतना है कि यह स्मृति में फिट बैठता है, तो आप पूरी फाइल पढ़ सकते हैं और एक io.BytesIO वस्तु पर काम कर सकते हैं, अपने स्वयं के वर्ग बनाने के लिए कोई जरूरत नहीं:

data = io.BytesIO(open('datafile','rb').read()) 
your_object = AlignmentFile(data, <other args>) 

मैं यह है कि यकीन नहीं है चीजों को बहुत तेज कर देगा, क्योंकि मुझे लगता है कि आधुनिक ऑपरेटिंग सिस्टम (मुझे पता है कि लिनक्स ऐसा करेगा) कैश फ़ाइल एक्सेस करें। तो हो सकता है कि उस पर भरोसा करना पर्याप्त हो।

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