2021년 5월 23일 일요일

Python requests stuck (requests 사용시 멈춤)


어떤 프로젝트를 진행하는데 hang/stuck 이 걸려서 이것저것 로그를 넣어서 확인해본 결과 requests 내부라는것을 알아냈습니다.

즉 내가 requests를 사용하지 않더라도 다른 패키지 내부에서 requests 패키지를 사용할 가능성이 있기 때문에 네트워크 관련 동작을 사용한다면 꼭 의심 해보시기 바랍니다.

https://docs.python-requests.org/en/master/user/quickstart/#timeouts


사용법은 put / get 함수 뒤에 인자로 timeout 시간을 초로 넘겨주면 됩니다.

설명은 아래와 같은데 대부분의 모든 최종 프로그램에서 이 인자를 사용해야 한다고 되어있습니다. 안그러면 무한정 기다리게 되는 경우가 있다고.... 하는데 이걸 기본값을 설정해 놔야 retry 하도록 구현할텐데.... 

Timeouts

You can tell Requests to stop waiting for a response after a given number of seconds with the timeout parameter. Nearly all production code should use this parameter in nearly all requests. Failure to do so can cause your program to hang indefinitely:

>>> requests.get('https://github.com/', timeout=0.001)


여기서 끝이 아닙니다. requests 를 사용했던 패키지가 import한경우라고 예를 들었으니 해당 소스 확인이 필합니다.  pip로 설치한 위치를 찾아봤습니다.

C:\Users\USER\AppData\Local\Programs\Python\Python38\Lib\site-packages\(패키지명)

제가 사용하는 소스의 위치입니다. python 위치나 버전에 따라서 다를 수 있으나 python의 Lib\site-packages 위치에 가면 소스가 있고 여기에 있는 소스를 필요에 따라 직접 수정하면 됩니다.


댓글 없음:

댓글 쓰기