โมดูล atexit ในการแจกแจงแบบมาตรฐานของ Python มีสองฟังก์ชัน – 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 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() พร้อมพารามิเตอร์ต่างๆ ออกจากรายการฟังก์ชัน
ไวยากรณ์มัณฑนากร
ทางเลือกที่สะดวกในการลงทะเบียนฟังก์ชันคือการใช้ฟังก์ชัน 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 มีประโยชน์ในการดำเนินการล้างข้อมูลโดยอัตโนมัติ เช่น การปิดฐานข้อมูลและไฟล์ การเพิ่มทรัพยากร ฯลฯ