पायथन के मानक वितरण में atexit मॉड्यूल के दो कार्य हैं - रजिस्टर () और अपंजीकृत ()। दोनों फ़ंक्शन कुछ मौजूदा फ़ंक्शन को तर्क के रूप में लेते हैं। जब दुभाषिया सत्र सामान्य रूप से समाप्त हो जाता है तो पंजीकृत कार्य स्वचालित रूप से निष्पादित होते हैं।
यदि एक से अधिक कार्य पंजीकृत हैं, तो उनका निष्पादन पंजीकरण के विपरीत क्रम में होता है। इसका मतलब है कि f1 (), f2 () और f3 () एक के बाद एक पंजीकृत हैं, उनके निष्पादन का क्रम f3 (), f2 () और f1 () होगा।
अपंजीकृत () फ़ंक्शन निर्दिष्ट फ़ंक्शन को स्वचालित रूप से लागू किए जाने वाले कार्यों की सूची से हटा देता है।
निम्नलिखित कोड दिखाता है कि कोड की समाप्ति पर स्वचालित निष्पादन के लिए फ़ंक्शन कैसे पंजीकृत होता है। (नोट:इस कोड को कमांड लाइन से निष्पादित किया जाना है न कि आईडीएलई के माध्यम से)। कार्यक्रम एक उपयोगकर्ता को क्रमिक रूप से संख्याओं को इनपुट करने के लिए कहता है और उन्हें जोड़ता है। जब लूप समाप्त हो जाता है, तो पंजीकृत फ़ंक्शन savetotal() फ़ाइल में जोड़ने को सहेजने के लिए स्वचालित रूप से कॉल किया जाता है।
import atexit sum = 0 def savetotal(): fo = open("atexit.txt","w") fo.write(str(sum)) print ("sum written to file") fo.close() atexit.register(savetotal) while True: n = int(input("enter a number. -1 to exit")) if n == -1: break sum = sum + n print (sum)
उपरोक्त कोड को atexit-example.py के रूप में सहेजें और कमांड लाइन से चलाएं। लगातार संख्या इनपुट जोड़े जाते हैं और कुल अंत में atexit.txt को लिखा जाता है।
C:\python36>python atexit-example.py enter a number. -1 to exit4 enter a number. -1 to exit6 enter a number. -1 to exit3 enter a number. -1 to exit5 enter a number. -1 to exit2 enter a number. -1 to exit-1 20 sum written to file
atexit.txt फ़ाइल वर्तमान निर्देशिका में बनाई जाएगी और यह कुल (इस मामले में 20) संग्रहीत करेगी।
विभिन्न तर्कों के साथ एक फ़ंक्शन को पंजीकृत करना भी संभव है। उस स्थिति में, प्रत्येक तर्क के साथ कार्य स्वतंत्र रूप से पंजीकृत किया जाएगा और पंजीकरण के विपरीत क्रम में निष्पादित किया जाएगा।
import atexit names = ['Ashok', 'Radha', 'Abdul', 'John'] def hello(name): print ("Hello",name) for name in names: atexit.register(hello,name)
आउटपुट
C:\python36>python atexit-example2.py Hello John Hello Abdul Hello Radha Hello Ashok
atexit.unregister(hello) hello() की सभी प्रतियों को कार्यों की सूची से विभिन्न मापदंडों के साथ हटा देगा।
डेकोरेटर सिंटैक्स
किसी फ़ंक्शन को पंजीकृत करने का एक सुविधाजनक विकल्प एक डेकोरेटर के रूप में रजिस्टर () फ़ंक्शन का उपयोग करना है।
import atexit @atexit.register def hello(): print('Hello World!') print('Say Hello')
आउटपुट
C:\python36>python atexit-example3.py Say Hello Hello World!
यदि प्रोग्राम अचानक समाप्त हो जाता है या os.exit() फ़ंक्शन को कॉल किया जाता है, तो पंजीकृत फ़ंक्शन स्वचालित रूप से लागू नहीं होंगे।
एटेक्सिट मॉड्यूल स्वचालित रूप से स्वच्छ संचालन जैसे डेटाबेस और फाइलों को बंद करने, संसाधनों को मुक्त करने आदि में उपयोगी है।