자원의 시작과 정리를 한 블록으로 관리합니다.
with는 블록 진입과 종료 시점에 정해진 동작을 실행합니다. 파일, 잠금, 데이터베이스 트랜잭션처럼 반드시 정리해야 하는 자원에 사용하며 예외가 발생해도 종료 동작이 호출됩니다.
with managed_task('데이터 처리')에 들어가면 yield 앞의 코드가 데이터 처리 시작을 출력하고, with 블록의 작업 중이 실행된 뒤 finally가 데이터 처리 정리를 출력합니다. 블록 안에서 예외가 나도 그 예외가 yield 지점에서 다시 일어나 finally를 거치므로 정리 출력은 빠지지 않습니다.
클래스의 __enter__/__exit__ 또는 contextlib.contextmanager와 yield로 만들 수 있습니다. __exit__ 반환값이 참이면 예외를 억제하므로 신중해야 합니다.
트랜잭션 컨텍스트는 성공 시 commit, 실패 시 rollback 규칙을 한곳에 두어 일부만 저장되는 상태를 막습니다.
정리 코드를 try 뒤에만 쓰면 중간 예외에서 실행되지 않습니다. finally나 with를 사용하세요.
직접 바꿔보세요소요 시간을 재는 컨텍스트 매니저로 바꿔보세요.
실행 버튼을 누르면 결과가 여기에 표시됩니다.