소프트웨어 마에스트로/BackEnd(Django)

[Django] async 관련 오류 해결기

alpakaka 2024. 10. 29. 16:21

asyncopenAI 를 사용하고 있는데, 계속 요청을 보낼 때는 괜찮은데 약 20초 뒤에만 보내도 바로 타임아웃이 발생하는 문제가 있다.

이것을 해결해보고자 한다. 

일단 그전에 테스트케이스를 조금 수정해보려고한다.

저번에 이런식으로 작성했다가 멘토님이 피드백을 해주셨다.

간단한 테스트라서 1초도 채 안걸릴건데 저 sleep때문에 굳이 10초를 기다릴 필요 없다는 피드백이었다.

추천해주셨던 라이브러리는 다음과 같다

https://github.com/spulec/freezegun

 

GitHub - spulec/freezegun: Let your Python tests travel through time

Let your Python tests travel through time. Contribute to spulec/freezegun development by creating an account on GitHub.

github.com

https://pypi.org/project/time-machine/

 

time-machine

Travel through time in your tests.

pypi.org

이렇게 두개를 추천받았고 간단한거로 사용해볼 예정이다. 

 

대충 스스슥 훑어봤는데 타임머신이 더 사용하는데 편해보여서 이걸로 해보려고한다.

 

그리고 추가적으로 받은 자료가 있어서 이것도 읽어보고 정하면 좋을 듯 싶다.

https://adamj.eu/tech/2021/02/19/freezegun-versus-time-machine/

 

time-machine versus freezegun, a benchmark - Adam Johnson

time-machine versus freezegun, a benchmark 2021-02-19 I wrote my library time-machine last year as a way to speed up tests that need to accurately mock the current time. The incumbent time mocking library, freezegun, mocks time by replacing every import of

adamj.eu

흠흠. 대략 스스슥 읽어보니 타임머신이 작은 프로젝트에서는 약 100배정도 빠르고 최대 200배 빠르다는 내용이 있었다.

라고 한다.

그러면 타임머신을 사용해보면 좋을 것 같다.

적용해보자.

설치한다.

참고한다.

적용한다.

에러가 났다...

왜 안되지...?

https://github.com/adamchainz/time-machine

 

GitHub - adamchainz/time-machine: Travel through time in your tests.

Travel through time in your tests. Contribute to adamchainz/time-machine development by creating an account on GitHub.

github.com

 

pytest 용이 있다는 걸 나중에 발견해서 넣어본다.

참고한다.
적용한다.
테스트완

꼭 shift 하기 전에 move_to 를 사용해야 한다고 에러를 한번 마주친거빼고는 정말 편하게 사용할 수 있었다..! ^^b

그리고 pypi 에는 없는 내용이 적혀져있었다.

스슥 읽어보면 차이점을 설명한 것 같다.

여튼 잘 사용했다^^b

 

그 다음으로 할 것은 잠시 테스트를 진행해본다.

recommend_api 를 보내고 1분뒤에 같은 요청을 보내본다.

에러가 난다. 저에러에서 요청을 보내서 타임아웃 응답을 받기 까지 18.85 초가 걸렸다.

한번 더 보내본다..

또 에러가 발생한다.

이번에는 26.72초가 소요되었다.

이것처럼 일정 시간이 지난후에 보내면 모두 타임아웃이 걸리는 문제가 생긴다. 동기적으로 시행했을 때는 문제가 없었는데 대체 왜 이러는 걸까...

생각상으로는 커넥션 관련으로 의심스러운데, 잘은 모르겠다. 왜이런거지

일단 모델을 4o-mini -> 4-turbo -> 3.5-turbo 로 바꿔보긴 했는데 똑같은 상태이다.

그래서 async 에 만들었던 커넥션을 모두 제외해보겠다.

자른다.

이렇게 해보고 계속 해보자..

저렇게 했는데 무한 로딩에 걸려서... timeout 을 설정해주고 다시 시도해줬다..

똑같이 문제가 발생했다.

이렇게 되면... 오픈 소스에서 문제가 있는건가..?

이슈를 한번 뒤적뒤적해본다.

https://github.com/openai/openai-python/issues/769

 

Constant timeouts after multiple calls with async · Issue #769 · openai/openai-python

Confirm this is an issue with the Python library and not an underlying OpenAI API This is an issue with the Python library Describe the bug Constant timeouts after multiple asynchronous calls. It w...

github.com

저번에도 봤던 내용인데 참고해야할 것 같다.

내리다보니 엄청난 토론의 장이 열려있었다...

근데 이슈는 끝냈는데 정말 이유를 모르겠다. 어떻게 하라는 거지, 딱히 코드도 없고 지금 상태는 이상태이다.

 

이게 해결법이라고 나와있는데 현실은 아니다..

정말 모르겠다...

혹시나 해서 timeout 도 2분으로 수정해서 진행했는데

타임아웃 답변이 나오기 까지의 시간이 더 길어졌다...

 

 

여기를 보면 2분동안 응답이 오지 않았고 총 2번 시도해본 것을 알 수 있었다.

정말 왜인걸까...?