컨텍스트 관리
정의
- 자원을 효율적이고 안전하게 사용할 수 있도록 하는 메커니즘
- 컨텍스트 관리는 파이썬에서는 “리소스 관리”의 의미로 사용되며.
- 타 프로그래밍 언어에서는 “실행 환경 및 상태 관리”와 같은 의미를 가지기도 한다.
리소스의 사용
- 리소스 : 파일, 데이터베이스 연결, 네트워크 소켓 등
- 리소스는 획득해서 사용한 후 명시적으로 폐기해야 한다.
- 폐기하지 않을 시, 메모리 누수나 데이터 손상 등의 문제가 발생될 수 있다.
컨텍스트 관리자
정의
- 특정 작업 전후에 필요한 사전(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