컨텍스트 관리

정의

  • 자원을 효율적이고 안전하게 사용할 수 있도록 하는 메커니즘
  • 컨텍스트 관리는 파이썬에서는 “리소스 관리”의 의미로 사용되며.
  • 타 프로그래밍 언어에서는 “실행 환경 및 상태 관리”와 같은 의미를 가지기도 한다.

리소스의 사용

  • 리소스 : 파일, 데이터베이스 연결, 네트워크 소켓 등
  • 리소스는 획득해서 사용한 후 명시적으로 폐기해야 한다.
  • 폐기하지 않을 시, 메모리 누수나 데이터 손상 등의 문제가 발생될 수 있다.

컨텍스트 관리자

정의

  • 특정 작업 전후에 필요한 사전(setup)작업과 사후(teardown)작업을 자동으로 처리
  • 목적 : 파일, 네트워크 및 데이터베이스 연결, 잠금(lock)과 같은 리소스를 효율적으로 할당하고 해제

작동 방식

  • 작동 방식 : with 구문을 사용
  • with 코드블럭이 시작될 때 리소스를 준비(__enter__메서드)하고
  • 블록이 종료될 때 리소스를 정리(__exit__메서드)하는 것을 보장한다.
  • 블록의 종료가 정상적이든, 비정상적이ㄴ든 리소스를 정리한다.

기본 문법

1
2
with 리소스 as alias:
  리소스를 이용한 작업

예시

파일을 열고 닫기

1
2
3
4
5
6
7
8
# 기존 : 파일을 열고, 사용이 종료되면 명시적으로 닫아야 함  
file = open("some_text.txt", "w")
file.write("Hello, World!\n")
file.close()

# with 구문 : 코드블럭 시작과 종료시에 자동으로 리소스를 관리
with open("some_text.txt", "w") as f:
  f.write("Hello, World!\m")

URL 연결 관리

1
2
3
4
r = requests.get("https://example.com", stream=True)
with r:
  for chunk in r.iter_content(chunk_size=1024):
    chunk ... 처리 로직

Reference

방송통신대 - 오픈소스기반 데이터분석 (정재화)

Comments