Python 3.7 - gc

जीसी - कचरा कलेक्टर इंटरफ़ेस




python

जीसी - कचरा कलेक्टर इंटरफ़ेस

यह मॉड्यूल वैकल्पिक कचरा संग्राहक को एक इंटरफ़ेस प्रदान करता है। यह कलेक्टर को अक्षम करने, संग्रह आवृत्ति को ट्यून करने और डीबगिंग विकल्प सेट करने की क्षमता प्रदान करता है। यह अनुपलब्ध वस्तुओं तक पहुंच भी प्रदान करता है जो कलेक्टर ने पाया लेकिन मुक्त नहीं कर सकता। चूँकि कलेक्टर पाइथन में पहले से इस्तेमाल की जा रही रेफरेंस काउंटिंग को सप्लीमेंट करता है, आप कलेक्टर को डिसेबल कर सकते हैं अगर आपको यकीन है कि आपका प्रोग्राम रेफरेंस साइकल नहीं बनाता है। स्वचालित संग्रह को gc.disable() कॉल करके अक्षम किया जा सकता है। लीक करने वाले प्रोग्राम को डीबग करने के लिए gc.set_debug(gc.DEBUG_LEAK) । ध्यान दें कि इसमें gc.DEBUG_SAVEALL शामिल है, जिससे कचरा संग्रहित वस्तुओं को निरीक्षण के लिए gc.garbage में सहेजा जा सकता है।

gc मॉड्यूल निम्नलिखित कार्य प्रदान करता है:

gc.enable()

स्वचालित कचरा संग्रहण सक्षम करें।

gc.disable()

स्वचालित कचरा संग्रहण अक्षम करें।

gc.isenabled()

यदि स्वचालित संग्रह सक्षम है, तो यह सही है।

gc.collect(generation=2)

बिना किसी तर्क के, पूरा संग्रह चलाएं। वैकल्पिक तर्क पीढ़ी एक पूर्णांक निर्दिष्ट कर सकती है जो यह बताती है कि किस पीढ़ी को इकट्ठा करना है (0 से 2 तक)। यदि जनरेशन नंबर अमान्य है, तो एक ValueError उठाया जाता है। अनुपलब्ध वस्तुओं की संख्या वापस आ गई है।

जब भी उच्चतम पीढ़ी (2) का पूर्ण संग्रह या संग्रह किया जाता है, तो कई अंतर्निहित प्रकारों के लिए बनाए गए मुफ्त सूचियों को मंजूरी दे दी जाती है। कुछ मुफ्त सूचियों में सभी वस्तुओं को विशेष कार्यान्वयन के कारण, विशेष float में मुक्त नहीं किया जा सकता है।

gc.set_debug(flags)

कचरा संग्रह डिबगिंग झंडे सेट करें। डिबगिंग जानकारी sys.stderr को लिखी sys.stderr । डिबगिंग झंडे की एक सूची के लिए नीचे देखें, जिसे डीबगिंग को नियंत्रित करने के लिए बिट संचालन का उपयोग करके जोड़ा जा सकता है।

gc.get_debug()

वर्तमान में सेट किए गए डिबगिंग झंडे वापस करें।

gc.get_objects()

लौटाए गए सूची को छोड़कर, कलेक्टर द्वारा ट्रैक की गई सभी वस्तुओं की सूची लौटाता है।

gc.get_stats()

दुभाषिया शुरू होने के बाद से संग्रह आँकड़ों वाले तीन प्रति-पीढ़ी शब्दकोशों की सूची वापस करें। भविष्य में कुंजियों की संख्या बदल सकती है, लेकिन वर्तमान में प्रत्येक शब्दकोश में निम्नलिखित आइटम होंगे:

  • collections इस पीढ़ी को एकत्र किए जाने की संख्या है;
  • collected इस पीढ़ी के अंदर एकत्र की गई वस्तुओं की कुल संख्या है;
  • uncollectable उन वस्तुओं की कुल संख्या है जो इस पीढ़ी के अंदर अचूक (और इसलिए garbage सूची में स्थानांतरित कर दी गई थीं) पाई गईं।

संस्करण 3.4 में नया।

gc.set_threshold(threshold0[, threshold1[, threshold2]])

कचरा संग्रह थ्रेशोल्ड (संग्रह आवृत्ति) सेट करें। थ्रेशोल्ड 0 को शून्य संग्रह में सेट करना।

जीसी वस्तुओं को तीन पीढ़ियों में वर्गीकृत करता है जो इस बात पर निर्भर करता है कि वे कितने संग्रह स्वीपों से बचे हैं। नई वस्तुओं को सबसे कम उम्र (पीढ़ी 0 ) में रखा गया है। यदि कोई वस्तु किसी संग्रह से बच जाती है तो उसे अगली पुरानी पीढ़ी में ले जाया जाता है। चूंकि पीढ़ी 2 सबसे पुरानी पीढ़ी है, इसलिए उस पीढ़ी में वस्तुएं संग्रह के बाद वहीं रहती हैं। कब चलना है, यह तय करने के लिए, कलेक्टर अंतिम संग्रह के बाद से संख्या ऑब्जेक्ट आवंटन और डीलक्लोशंस का ट्रैक रखता है। जब आबंटन की संख्या माइनस डीलहोल्स की संख्या सीमा से अधिक हो जाती है , तो संग्रह शुरू होता है। प्रारंभ में केवल पीढ़ी 0 की जांच की जाती है। यदि जनरेशन 0 की जांच थ्रेशोल्ड 1 से अधिक बार की गई है क्योंकि जनरेशन 1 की जांच की गई है, तो जनरेशन 1 भी जांच की जाती है। इसी तरह, थ्रेशोल्ड 2 पीढ़ी 2 इकट्ठा करने से पहले पीढ़ी 1 के संग्रह की संख्या को नियंत्रित करता है।

gc.get_count()

(count0, count1, count2) टपल के रूप में वर्तमान संग्रह मायने रखता है।

gc.get_threshold()

(threshold0, threshold1, threshold2) टपल के रूप में वर्तमान संग्रह थ्रेसहोल्ड लौटाएं।

gc.get_referrers(*objs)

उन वस्तुओं की सूची लौटाएं जो सीधे किसी भी objs को संदर्भित करती हैं। यह फ़ंक्शन केवल उन कंटेनरों का पता लगाएगा जो कचरा संग्रह का समर्थन करते हैं; विस्तार प्रकार जो अन्य वस्तुओं को संदर्भित करते हैं लेकिन कचरा संग्रह का समर्थन नहीं करते हैं, वे नहीं मिलेंगे।

ध्यान दें कि जिन वस्तुओं को पहले ही निष्क्रिय कर दिया गया है, लेकिन जो चक्रों में रहते हैं और अभी तक कचरा संग्रहकर्ता द्वारा एकत्र नहीं किए गए हैं, उन्हें परिणामी रेफरल में सूचीबद्ध किया जा सकता है। वर्तमान में केवल लाइव ऑब्जेक्ट प्राप्त करने के लिए, get_referrers() कॉल collect() से पहले कॉल collect() करें get_referrers()

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

gc.get_referents(*objs)

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

gc.is_tracked(obj)

यदि ऑब्जेक्ट वर्तमान में कचरा संग्रहकर्ता द्वारा ट्रैक किया गया है, तो True है, अन्यथा False । एक सामान्य नियम के रूप में, परमाणु प्रकार के उदाहरणों को ट्रैक नहीं किया जाता है और गैर-परमाणु प्रकार (कंटेनरों, उपयोगकर्ता-परिभाषित ऑब्जेक्ट्स) के उदाहरण हैं। हालाँकि, कुछ प्रकार के विशिष्ट अनुकूलन सरल उदाहरणों के कचरा कलेक्टर पदचिह्न को दबाने के लिए मौजूद हो सकते हैं (उदाहरण के लिए केवल परमाणु कुंजी और मान युक्त dicts):

>>> gc.is_tracked(0)
False
>>> gc.is_tracked("a")
False
>>> gc.is_tracked([])
True
>>> gc.is_tracked({})
False
>>> gc.is_tracked({"a": 1})
False
>>> gc.is_tracked({"a": []})
True

संस्करण 3.1 में नया।

gc.freeze()

जीसी द्वारा ट्रैक की गई सभी वस्तुओं को फ्रीज करें - उन्हें एक स्थायी पीढ़ी में स्थानांतरित करें और भविष्य के सभी संग्रह को अनदेखा करें। GOS कॉपी-ऑन-राइट फ्रेंडली बनाने या संग्रह को गति देने के लिए POSIX कांटा () कॉल से पहले इसका उपयोग किया जा सकता है। POSIX कांटा () कॉल से पहले संग्रह को भविष्य के आवंटन के लिए मुक्त पृष्ठ हो सकता है जो कॉपी-ऑन-राइट भी कर सकता है, इसलिए यह सलाह दी जाती है कि मास्टर प्रक्रिया में gc को अक्षम करें और fork से पहले फ्रीज करें और बच्चे की प्रक्रिया में gc को सक्षम करें।

संस्करण 3.7 में नया।

gc.unfreeze()

स्थायी पीढ़ी में वस्तुओं को अप्रभावित करें, उन्हें सबसे पुरानी पीढ़ी में वापस डालें।

संस्करण 3.7 में नया।

gc.get_freeze_count()

स्थायी पीढ़ी में वस्तुओं की संख्या लौटाएं।

संस्करण 3.7 में नया।

निम्नलिखित चर केवल पढ़ने के लिए दिए गए हैं (आप मानों को बदल सकते हैं लेकिन उन्हें पुन: स्थापित नहीं करना चाहिए):

gc.garbage

उन वस्तुओं की एक सूची जो कलेक्टर को अनुपलब्ध लगती थी लेकिन उन्हें मुक्त नहीं किया जा सकता था (अस्वीकार्य वस्तुएं)। पायथन 3.4 के साथ शुरू, यह सूची अधिकांश समय खाली होनी चाहिए, सिवाय एक गैर-नल tp_del स्लॉट के साथ C एक्सटेंशन प्रकार के उदाहरणों का उपयोग करते समय।

यदि DEBUG_SAVEALL सेट किया गया है, तो सभी DEBUG_SAVEALL वस्तुओं को मुक्त करने के बजाय इस सूची में जोड़ दिया जाएगा।

संस्करण 3.2 में परिवर्तित: यदि यह सूची दुभाषिया बंद होने पर खाली नहीं होती है, तो एक ResourceWarning का उत्सर्जन होता है, जो डिफ़ॉल्ट रूप से चुप है। यदि DEBUG_UNCOLLECTABLE सेट की गई है, तो इसके अलावा सभी DEBUG_UNCOLLECTABLE वस्तुएँ मुद्रित होती हैं।

संस्करण __del__() में परिवर्तित: पीईपी ४४२ के बाद, __del__() विधि के साथ garbage अब garbage में garbage नहीं होती हैं।

gc.callbacks

संग्रह से पहले और बाद में कचरा कलेक्टर द्वारा आह्वान किए जाने वाले कॉलबैक की एक सूची। कॉलबैक को दो तर्कों, चरण और सूचनाओं के साथ कहा जाएगा।

चरण दो मूल्यों में से एक हो सकता है:

"प्रारंभ": कचरा संग्रह शुरू होने वाला है।

"बंद करो": कचरा संग्रह समाप्त हो गया है।

जानकारी कॉलबैक के लिए अधिक जानकारी प्रदान करने वाला एक तानाशाह है। वर्तमान में निम्नलिखित कुंजियाँ परिभाषित की गई हैं:

"पीढ़ी": सबसे पुरानी पीढ़ी एकत्र की जा रही है।

"एकत्र": जब चरण "बंद" होता है, तो सफलतापूर्वक एकत्र की गई वस्तुओं की संख्या।

"अस्वीकार्य": जब चरण "बंद" होता है, तो उन वस्तुओं की संख्या जो एकत्र नहीं की जा सकती थीं और उन्हें garbage में डाल दिया गया था।

एप्लिकेशन इस सूची में अपनी कॉलबैक जोड़ सकते हैं। प्राथमिक उपयोग के मामले हैं:

कचरा संग्रह के बारे में आंकड़े इकट्ठा करना, जैसे कि कितनी बार विभिन्न पीढ़ियों को एकत्र किया जाता है, और संग्रह में कितना समय लगता है।

garbage में दिखाई देने पर अपने स्वयं के अचूक प्रकारों को पहचानने और साफ़ करने के लिए अनुप्रयोगों की अनुमति देना।

संस्करण 3.3 में नया।

निम्नलिखित स्थिरांक set_debug() साथ उपयोग के लिए दिए गए हैं:

gc.DEBUG_STATS

संग्रह के दौरान आंकड़े प्रिंट करें। संग्रह आवृत्ति को ट्यून करते समय यह जानकारी उपयोगी हो सकती है।

gc.DEBUG_COLLECTABLE

संग्रहणीय वस्तुओं पर जानकारी प्रिंट करें।

gc.DEBUG_UNCOLLECTABLE

अयोग्य वस्तुओं की प्रिंट की गई जानकारी (ऐसी वस्तुएं जो उपलब्ध नहीं हैं लेकिन कलेक्टर द्वारा मुक्त नहीं की जा सकती हैं)। इन वस्तुओं को garbage सूची में जोड़ा जाएगा।

संस्करण 3.2 में परिवर्तित: यदि यह खाली नहीं है, तो इंटरप्रेटर शटडाउन में garbage सूची की सामग्री को भी प्रिंट करें।

gc.DEBUG_SAVEALL

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

gc.DEBUG_LEAK

डिबगिंग झंडे कलेक्टर के लिए एक लीक कार्यक्रम के बारे में जानकारी मुद्रित करने के लिए आवश्यक ( DEBUG_COLLECTABLE | DEBUG_UNCOLLECTABLE | DEBUG_SAVEALL बराबर DEBUG_COLLECTABLE | DEBUG_UNCOLLECTABLE | DEBUG_SAVEALL )।