Q&A

책을 따라하다가 막히는 부분이 있나요?
질문을 남겨주세요.

장고 비동기

3 years, 5 months ago

why why

처리시간이 오래걸리는 작업인 경우 작업이 끝날때까지 다른사람들이 작업을 못하자나요

이러한 경우 장고에서도 nodejs처럼 비동기 처리 방식이 있는지 궁금합니다..


taegon
taegon   3 years, 5 months ago

안녕하세요.

좋은 질문입니다. 소규모로 운영하실 때는 운영하실 때는 문제가 없을텐데, 규모가 커지거나 큰 파일을 처리해야 하는 경우, 하나의 리퀘스트가 처리될때까지 다른 리퀘스트가 기다리게 되지요. 이해하신대로 동기화 방식으로 처리하게 되면 문제가 될 수 있겠습니다.

장고는 기본적으로는 동기화방식이 맞습니다. 그래서 개발모드로 로컬에서 테스트하실 때는 한번에 하나의 리퀘스트만 처리하게 됩니다. 대신 저희 책에서 웹서버(nginx)와 연결해서 배포하는 방식을 알려드렸는데, 이 때 gunicorn를 쓴 것을 기억하실겁니다. 이 때 gunicorn를 통해서 여러개의 프로세스 혹은 쓰레드를 구동할 수 있습니다. 즉 하나의 쓰레드에서는 하나의 처리만 가능하지만, 동시에 여러개의 쓰레드에서 장고가 실행되면서 많은 리퀘스트를 처리할 수 있게 됩니다. wsgi를 쓰는 프레임워크는 대부분 적용가능한 전략입니다.

또한 장고 3.1부터는 비동기방식의 뷰를 제공하기도 합니다만, 책을 구상하면서 모든 것을 다룰 수는 없어서 이 부분을 포함하지는 않았습니다. 관심있으시면 관련 부분을 찾아 보셔도 좋을 것 같습니다.

도움이 되셨길 바랍니다. 고맙습니다.

Updated: June 6, 2021, 3:31 a.m.

why
why   3 years, 5 months ago

gunicorn를 여러개의 쓰레드로 구동하기 위해서는 어떻게 해야하나요??

이 부분만 해결하면 사이트 완성에 도달하는데 실제 사이트에서는 어떤 방식이 좋은건지 모르겠네요.

Updated: June 10, 2021, 1:53 a.m.

taegon
taegon   3 years, 5 months ago

구글링을 해보시면 쉽게 관련 자료를 찾아보실 수 있습니다.

참고로 제가 찾아본 2개 자료를 읽어보시면 조금 도움이 되실 것 같습니다.

https://blog.winterjung.dev/2018/04/08/flask-concurrency-test

https://soniacomp.medium.com/장고-django-멀티스레드-와-node-js-싱글-스레드-202b3270bf95

워커와 쓰레드, 타입 등을 지정할 수 있는데, 숫자는 다음 글을 참조하시면 좋을 것 같습니다.

https://medium.com/building-the-system/gunicorn-3-means-of-concurrency-efbb547674b7

https://medium.com/analytics-vidhya/deploying-optimizing-your-django-deployment-with-gunicorn-why-cant-i-just-use-manage-py-3ecb72cd6882

설정은 docker-compose.yml 파일을 수정하시면 되고, 아래 부분에 워커와 쓰레드를 추가하시면 됩니다.

gunicorn do_it_django_prj.wsgi:application --bind 0.0.0.0:8000

추가한 코드는 아래 글을 참조하시면 쉽게 이해하실 수 있을겁니다.

https://stackoverflow.com/questions/66631489/does-django-use-one-thread-to-process-several-requests-in-wsgi-or-gunicorn

직접 테스트해보지 않아서, 적정 숫자를 말씀드리긴 어려운데, 저희가 책에서 소개시킨 것처럼 가장 저렴한 플랜으로 사용하고 계시다면, 가상 cpu가 1개이므로, 워커를 2개, 혹은 스레드를 3-4개 정도 지정하실 수 있을 것 같습니다. 만약 상용서비스를 염두하고 계시다면, 요금이 더 높은 플랜을 살펴보시면 가용성을 좀 더 늘릴 수 있을겁니다.

고맙습니다.

Updated: June 11, 2021, 9:59 a.m.

Leave a Comment:
목록보기
Search
  • 자유게시판
  • Q&A