आप जो सुझाव दे रहे हैं वह सीधे संभव नहीं है। चूंकि नई प्रक्रियाओं को आपके नियंत्रण से बाहर किया जा सकता है, इसलिए मूल पायथन डेटा को स्मृति में रखने का कोई तरीका नहीं है।
हालांकि, इसके लिए कुछ तरीके हैं।
अक्सर, आपको केवल एक स्तर की कुंजी-मूल्य संग्रहण की आवश्यकता होती है। और कभी-कभी, मानों के लिए निश्चित आकार के बफ़र्स (जिसे आप सीधे str
. के रूप में उपयोग कर सकते हैं) /bytes
/bytearray
वस्तुएं; कुछ और जो आपको चाहिए struct
वहां या अन्यथा क्रमबद्ध करें) आपको बस इतना ही चाहिए। उस स्थिति में, यूडब्ल्यूएसजीआई का अंतर्निहित कैशिंग ढांचा आपकी जरूरत की हर चीज का ख्याल रखेगा।
यदि आपको अधिक सटीक नियंत्रण की आवश्यकता है, तो आप देख सकते हैं कि SharedArea
के शीर्ष पर कैश कैसे कार्यान्वित किया जाता है और कुछ अनुकूलित करें। हालांकि, मैं इसकी अनुशंसा नहीं करता। यह मूल रूप से आपको उसी प्रकार का एपीआई देता है जो आपको फ़ाइल के साथ मिलता है, और केवल फ़ाइल का उपयोग करने पर एकमात्र वास्तविक लाभ यह है कि सर्वर फ़ाइल के जीवनकाल का प्रबंधन करेगा; यह सभी यूडब्ल्यूएसजीआई समर्थित भाषाओं में काम करता है, यहां तक कि वे भी जो फाइलों की अनुमति नहीं देते हैं; और यदि आपको बाद में आवश्यकता हो तो यह आपके कस्टम कैश को एक वितरित (बहु-कंप्यूटर) कैश में माइग्रेट करना आसान बनाता है। मुझे नहीं लगता कि इनमें से कोई भी आपके लिए प्रासंगिक है।
फ्लैट की-वैल्यू स्टोरेज प्राप्त करने का एक और तरीका है, लेकिन निश्चित आकार के बफर के बिना, पायथन के stdlib anydbm
के साथ है . की-वैल्यू लुकअप उतना ही पाइथोनिक है जितना इसे मिलता है:यह बिल्कुल dict
. जैसा दिखता है , सिवाय इसके कि यह एक ऑन-डिस्क BDB (या समान) डेटाबेस में बैकअप है, मेमोरी में उपयुक्त के रूप में कैश किया गया है, बजाय इन-मेमोरी हैश तालिका में संग्रहीत किए जाने के।
यदि आपको कुछ अन्य सरल प्रकारों को संभालने की आवश्यकता है - कुछ भी जो तेजी से अन/अचार करने के लिए तेज़ है, जैसे int
s—आप shelve
. पर विचार करना चाह सकते हैं .
यदि आपकी संरचना पर्याप्त कठोर है, तो आप शीर्ष स्तर के लिए कुंजी-मान डेटाबेस का उपयोग कर सकते हैं, लेकिन मानों को ctypes.Structure
के माध्यम से एक्सेस कर सकते हैं। , या struct
. के साथ de/serialize करें . लेकिन आमतौर पर, यदि आप ऐसा कर सकते हैं, तो आप शीर्ष स्तर को भी समाप्त कर सकते हैं, जिस बिंदु पर आपकी पूरी चीज सिर्फ एक बड़ी Structure
है। या Array
.
उस समय, आप भंडारण के लिए केवल एक सादे फ़ाइल का उपयोग कर सकते हैं—या तो mmap
यह (ctypes
. के लिए ), या बस open
और read
यह (struct
. के लिए )
या multiprocessing
. का उपयोग करें साझा किया गया ctypes
आपके Structure
तक पहुंचने के लिए ऑब्जेक्ट सीधे साझा स्मृति क्षेत्र से बाहर।
इस बीच, यदि आपको वास्तव में हर समय सभी कैश डेटा की आवश्यकता नहीं है, बस बिट्स और टुकड़ों को हर बार एक बार में, डेटाबेस के लिए ठीक यही है। फिर से, anydbm
, आदि आप सभी की आवश्यकता हो सकती है, लेकिन यदि आपके पास जटिल संरचना है, तो एक ईआर आरेख बनाएं, इसे तालिकाओं के एक सेट में बदल दें, और MySQL जैसी किसी चीज़ का उपयोग करें।