Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

Python 프로그램 종료 처리기(atexit)

<시간/>

Python 표준 배포판의 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 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 모듈은 데이터베이스 및 파일 닫기, 리소스 확보 등과 같은 깨끗한 작업을 자동으로 수행하는 데 유용합니다.