Temp

[Pillow] Improve handling of file resources

ju_young 2022. 9. 5. 21:57
728x90

__del__ 함수는 python의 ResourceWarnings를 예방하기위해 열려있는 file handler를 닫는 용도로 사용된다.

 

하지만 __del__ 함수는 다음과 같은 단점들을 가지고 있다.

 

1. __del__ 함수는 참조된 object의 개수가 0이 될 때까지 호출되지 않는다. 그래서 resource handler가 필요 이상으로 사용되거나 열러있다.

2. __del__함수는 system exit가 될 때 실행이 보장되지 않는다. (Python documentation)

It is not guaranteed that __del__() methods are called for objects that still exist when the interpreter exits.

3. __del__ 함수 안에서 발생하는 Exception은 발생하는 대신 무시된다. 이것은 bug들을 숨긴다는 의미이다.

Warning: Due to the precarious circumstances under which __del__() methods are invoked, exceptions that occur during their execution are ignored, and a warning is printed to sys.stderr instead.

따라서 파일을 사용하지 않을때는 항상 resource handler를 닫아야한다.

 

코드를 확인해보면 다음과 같다.

# Before
im = Image.open("hopper.png")
im.save("out.jpg")

# After
with Image.open("hopper.png") as im:
    im.save("out.jpg")

 

[reference]

https://github.com/python-pillow/Pillow/pull/3929

https://github.com/python-pillow/Pillow/pull/3577

728x90

'Temp' 카테고리의 다른 글

[Ubuntu] Not writeable  (0) 2022.09.13
Ubuntu 18.04 Install  (0) 2022.09.07
[Ubuntu 18.04] Failed to start NVIDIA Persistence Daemon  (0) 2022.09.05
모든 Nvidia & CUDA 제거  (0) 2022.09.03
pytorch cuda 11.3과 cuda 10.2의 속도 차이  (0) 2022.08.05