पायथन re
मॉड्यूल पर दस्तावेज़ पढ़ने के दौरान मैंने re.py
स्रोत कोड पर एक नज़र डालने का निर्णय लिया।पायथन री मॉड्यूल का कैश समाशोधन
जब मैं इसे खोला, मैं इस पाया:
_cache = {}
_MAXCACHE = 100
def _compile(*key):
cachekey = (type(key[0]),) + key
p = _cache.get(cachekey)
if p is not None:
return p
#...Here I skip some part of irrelevant to the question code...
if len(_cache) >= _MAXCACHE:
_cache.clear()
_cache[cachekey] = p
return p
क्यों कैश जब यह प्रविष्टियों की _MAXCACHE
तक पहुँच जाता है _cache.clear()
का उपयोग कर को मंजूरी दे दी है?
कैश साफ़ करने और स्क्रैच से शुरू करने के लिए यह सामान्य दृष्टिकोण है?
क्यों अभी तक सबसे लंबे समय तक उपयोग नहीं किया गया है कैश किए गए मान को हटा दिया गया है?
दिलचस्प सवाल। मुझे लगता है कि यह डेवलपर के उस हिस्से पर आलस्य हो सकता था जिसने इस कोड को लिखा था, या शायद "जटिल जटिल से बेहतर है" सोच। :-) – NPE
मैंने सोचा कि कुछ वैज्ञानिक शोध हो सकते हैं जो आकार में कुछ निरंतर मूल्य तक पहुंचने पर कैश साफ़ करने के इस दृष्टिकोण को उचित ठहराते हैं। – ovgolovin
यहां ट्रैक किए गए विकास के तहत नए रेगेक्स मॉड्यूल के स्रोत को देखना दिलचस्प हो सकता है: http://bugs.python.org/issue2636। विवरण में "स्मार्ट कैशिंग" शब्द शामिल है, इसलिए उस क्षेत्र में कुछ सुधार किए जा सकते हैं। –