Python(파이썬) 기본 - 49. contextlib모듈의 closing활용

아래 내용은 공부한 것을 정리하므로 틀린 내용이 포함되어 있을 수 있습니다.

1. contextlib모듈의 closing 활용

  • contextlib 모듈을 통해서 어떠한 작업을할때 자동으로 close메소드를 호출하게끔 할 수 있습니다.
  • 예제를 위해 close.py파일을 작성합니다.
      class OpenClose:
        
          def open(self):
              print("작업을 시작합니다.")
        
          def do_something(self):
              print("작업을 진행합니다...")
              print("작업을 진행합니다...")
              print("작업을 진행합니다...")
        
          def close(self):
              print("작업을 종료합니다.")
        
                
      def doOpenClose():
          d = OpenClose()
          d.open()
          d.do_something()
          d.close()
    
  • REPL에서 실행해봅니다.
      >>> from close import doOpenClose
      >>> doOpenClose()
      작업을 시작합니다.
      작업을 진행합니다...
      작업을 진행합니다...
      작업을 진행합니다...
      작업을 종료합니다.
      >>> 
    
  • 명시적으로 OpenClose클래스의 메소드들을 하나씩 호출하였습니다.
  • contextlib모듈의 closing메소드를 활용하면 자동으로 클래스 내부의 close메소드를 호출하게 할 수 있습니다.
  • contextlib모듈의 closing메소드를 import하고 doOpenClose()메소드를 아래와 같이 수정하였습니다.
  • with절로 감싸며, closing메소드를 사용했고, close()메소드를 이번에는 사용하지 않았습니다.
      from contextlib import closing
    
          ... 생략 ...
    
      def doOpenClose():
          with closing(OpenClose()) as d :
              d.open()
              d.do_something()
    
  • REPL을 종료하고 재실행하여 결과를 확인 합니다.
  • close메소드를 실행하지 않았지만 closing메소드가 클래스 내부의 close메소드를 자동으로 실행해 줍니다.
      >>> from close import doOpenClose
      >>> doOpenClose()
      작업을 시작합니다.
      작업을 진행합니다...
      작업을 진행합니다...
      작업을 진행합니다...
      작업을 종료합니다.