पायथन के स्टैंडर्ड डिस्ट्रीब्यूशन में atexit मॉड्यूल में दो फ़ंक्शन्स हैं - register() और unregister(). दोनों फ़ंक्शन्स किसी मौजूदा फ़ंक्शन को तर्क के रूप में लेते हैं। रजिस्टर्ड फ़ंक्शन्स स्वचालित रूप से तब एक्ज़ीक्यूट होते हैं जब इंटरप्रेटर सेशन सामान्य रूप से समाप्त होता है।
यदि एक से अधिक फ़ंक्शन्स रजिस्टर्ड हैं, तो उनका एक्ज़ीक्यूशन रजिस्ट्रेशन के रिवर्स ऑर्डर में होता है। इसका मतलब है, यदि फ़ंक्शन्स f1(), f2() और f3() एक के बाद एक रजिस्टर्ड हैं, तो उनका एक्ज़ीक्यूशन ऑर्डर f3(), f2() और f1() होगा।
unregister() फ़ंक्शन स्वचालित रूप से आमंत्रित किए जाने वाले फ़ंक्शन्स की सूची से निर्दिष्ट फ़ंक्शन को हटा देता है।
निम्न कोड दिखाता है कि कोड समाप्ति पर स्वचालित एक्ज़ीक्यूशन के लिए फ़ंक्शन कैसे रजिस्टर किया जाता है। (नोट: इस कोड को कमांड लाइन से चलाना होगा न कि IDLE के माध्यम से)। प्रोग्राम यूजर से क्रमिक रूप से नंबर इनपुट करने को कहता है और उन्हें जोड़ता है। जब लूप खत्म होता है, तो रजिस्टर्ड फ़ंक्शन 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 exit 4 enter a number. -1 to exit 6 enter a number. -1 to exit 3 enter a number. -1 to exit 5 enter a number. -1 to exit 2 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() की सभी कॉपीज़ को फ़ंक्शन्स की सूची से हटा देगा।
डेकोरेटर सिंटैक्स
फ़ंक्शन रजिस्टर करने का एक सुविधाजनक विकल्प register() फ़ंक्शन को डेकोरेटर के रूप में उपयोग करना है।
import atexit
@atexit.register
def hello():
print('Hello World!')
print('Say Hello')
आउटपुट
C:\python36>python atexit-example3.py Say Hello Hello World!
यदि प्रोग्राम अचानक समाप्त होता है या os.exit() फ़ंक्शन कॉल किया जाता है तो रजिस्टर्ड फ़ंक्शन्स स्वचालित रूप से आमंत्रित नहीं होंगे।
atexit मॉड्यूल डेटाबेस और फ़ाइलों को बंद करने, संसाधनों को मुक्त करने आदि जैसे क्लीन ऑपरेशन्स को स्वचालित रूप से करने में उपयोगी है।