티스토리 뷰

Python 프로그래밍중 프로그램이 키보드 인터럽트(Ctrl + c) 혹은 강제 종료, 정상 종료 케이스에 따라서 특정 함수가 호출됐어야 했었습니다. 제 경우를 자세히 말씀드리자면 pyav를 사용하여 RTSP 프로토콜로 비디오를 수신받아 디코딩을 하는데, RTSP 서버(VLC 이용)와 연결 후 연결을 끊어주지 않고 클라이언트 측 프로그램이 종료되는 경우 RTSP 서버의 VLC 프로그램 또한 정상적으로 동작을 안하는 문제가 있었습니다. 확인해보니 항상 연결을 끊어줘야하는데 그렇지 않은 경우 문제가 발생하던 것이였습니다.

 

https://github.com/PyAV-Org/PyAV

 

GitHub - PyAV-Org/PyAV: Pythonic bindings for FFmpeg's libraries.

Pythonic bindings for FFmpeg's libraries. Contribute to PyAV-Org/PyAV development by creating an account on GitHub.

github.com

 

이때 필요한 Python 패키지가 atexit 였습니다.

 

Python의 atexit 모듈은 프로그램 종료 시 특정 동작을 수행하도록 설정할 수 있는 유용한 기능을 제공합니다. 이를 활용하면 리소스를 정리하거나 중요한 데이터를 저장하는 등의 작업을 안전하게 처리할 수 있습니다.

 

import atexit

def goodbye():
    print("프로그램이 종료됩니다. 작업을 정리합니다.")

# atexit 모듈에 종료 시 실행할 함수 등록
atexit.register(goodbye)

# 프로그램의 메인 로직
print("프로그램이 실행 중입니다...")
# 이 부분에 프로그램의 주요 로직을 추가합니다.

 

위의 코드 예제에서는 goodbye 함수를 정의하고, atexit.register() 함수를 사용하여 프로그램 종료 시 goodbye 함수가 호출되도록 설정했습니다. 프로그램이 정상적으로 종료되거나 예외적인 상황에서도 goodbye 함수는 호출되어 "프로그램이 종료됩니다. 작업을 정리합니다."라는 메시지를 출력합니다.

atexit 모듈은 프로그램 종료 시점에 자동으로 등록된 함수들을 호출하는 간단하면서도 강력한 메커니즘을 제공합니다. 이를 통해 개발자는 프로그램 종료 시 필요한 리소스 정리나 데이터 저장 등의 작업을 손쉽게 구현할 수 있습니다.


주의사항

  • atexit에 등록된 함수들은 프로그램이 강제로 종료될 경우(예: 시스템의 kill 명령어 사용) 실행되지 않을 수 있습니다.
  • 등록된 함수 내에서 발생하는 예외는 무시되므로, 함수 내부에서 적절한 예외 처리를 해주어야 합니다.

이처럼 atexit 모듈을 활용하면 프로그램의 종료 시점에 필요한 동작을 정의하고 안정적으로 수행할 수 있어 매우 유용합니다.


개인 경험을 제외하고 ChatGPT를 사용하여 작성한 글입니다.

 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함