flask 2

celery + flask 를 이용한 파이썬 비동기 처리 API 구현

flask는 유저의 요청을 동기적으로 처리한다. 실행 시간이 오래 걸릴 것으로 기대되는 엔드포인트의 경우, 비동기 처리 방식으로 구현하고 싶을 수 있는데 celery 를 이용해서 아래와 같이 구현하면 된다. celery의 백엔드로 레디스를 사용할 것이므로 먼저 설치&실행 해준다. 아래 코드에선 - 비동기 작업 (adder) 시작 - 특정 태스크(id)의 상태 체크 - 결과 받아보기 endpoint를 구현하였다. import os import sys import time from flask import Flask from flask import request from flask import jsonify from celery import Celery def make_celery(app): celery = ..

http&server 2021.01.05

02. flask + gunicorn + docker 조합

파이썬을 이용해서 웹 애플리케이션 서버를 작성할 때, flask 만큼 쉬운게 없다고 생각한다. 회사에서도 간단한 WAS를 작성할 때 flask를 사용하고 있다. flask 관련해서 기억하고 싶은 것들 몇 가지를 정리해본다. Flask 와 Gunicorn, 그리고 Docker 같이 쓰기 플라스크는 내부적으로 Blocking 작업이 있을 경우, A가 API 작업에 요청을 보내고 B가 동일 API에 요청을 해도, A가 다 처리 될 때 까지 기다린다. 따라서 flask 앱 내부에서 IO(request, file) 작업을 할 때 주의 해야한다. 플라스크 앱은 기본적으로 synchronous 하다. 하지만, 이 부분에서 gunicorn을 통해 여러 워커를 띄워 워커 개수 만큼의 요청을 동시에 처리하게 할 수 있다...

http&server 2020.07.29