파이썬, atexit 종료 처리기
atexit 모듈은 정리 함수 등록/해제를 지원한다. 등록 함수는 정상적인(???) 인터프리터 종료 시 자동 실행된다.
atexit는 등록 역순으로 처리하므로 A, B, C 등록하면, 인터프리터 종료 시 C, B, A 순서로 실행된다.
[참고] 다음과 같은 경우에는 호출되지 않음.
1) 파이썬이 처리하지 않는 시그널에 의해 종료 2) 파이썬 치명 내부 에러가 감지 3) os._exit() 호출
atexit.register(func, *args, **kwargs)
----------------------------------------
종료 시 실행할 함수 func를 등록한다. func에 전달되어야 하는 인자는 register()에 인자로 전달되어야 한다.
같은 함수와 인자를 두 번 이상 등록 할 수 있다.
정상 프로그램 종료 시(sys.exit() 호출 또는 주 모듈 실행 완료), 등록 함수는 후입선출 순서로 호출된다.
낮은 수준 모듈은 대개 상위 수준 모듈보다 먼저 임포트 되므로 나중에 정리한다는 가정을 따른다.
이 함수는 func을 반환하므로 데코레이터로 사용할 수 있다.
atexit.unregister(func)
-------------------------
종료 처리에 등록된 함수를 제거한다.
atexit 예제:
모듈이 임포트 될 때 파일에서 카운터를 읽고 프로그램이 종료 시 카운트를 자동 저장
import atexit
def incrcounter(n):
global _count
_count = _count + n
def savecounter():
with open('counterfile', 'w') as outfile:
outfile.write('%d' % _count)
atexit.register(savecounter) # 방식
def goodbye(name, adjective):
print('Goodbye %s, it was %s to meet you.' % (name, adjective))
# 위치 및 키워드 인자가 등록된 함수가 호출될 때 전달되도록 register()에 전달
atexit.register(goodbye, 'Donny', 'nice') # atexit.register(goodbye, adjective='nice', name='Donny')
@atexit.register # 데코레이터로 사용 (단, 인자 없이 호출하는 함수만)
def goodbye2():
print('이제 파이썬을 종료합니다.')
try:
with open('counterfile') as infile:
_count = int(infile.read())
except FileNotFoundError:
_count = 0
'Python 기초' 카테고리의 다른 글
파이썬, 코드 또는 함수 실행 시간 자동 측정 (timeit 이용) (0) | 2022.01.30 |
---|---|
파이썬, C 언어 printf() 함수 흉내내기 (0) | 2022.01.27 |
파이썬, date, time, timestamp 표현 (0) | 2022.01.17 |
사용 중인 파이썬 시스템 경로 목록을 출력하기 (0) | 2022.01.14 |
파이썬, 진수 변환표 출력하기 (2, 8, 10, 16진수 비교표) (0) | 2021.12.29 |