โมดูล 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 มีประโยชน์ในการดำเนินการล้างข้อมูลโดยอัตโนมัติ เช่น การปิดฐานข้อมูลและไฟล์ การเพิ่มทรัพยากร ฯลฯ