[python] Flask-RESTful에서 비동기 작업 처리 방법

Flask-RESTful은 Python 웹 프레임워크인 Flask의 확장판으로, RESTful API를 쉽게 개발할 수 있도록 도와줍니다. 비동기 작업을 처리해야 할 때 Flask-RESTful에서 어떻게 처리할 수 있는지 알아보겠습니다.

1. 비동기 작업이란?

비동기 작업은 하나의 작업이 완료될 때까지 기다리지 않고 다른 작업을 수행하는 것을 의미합니다. 예를 들어, 네트워크 요청이나 데이터베이스 쿼리 등은 오랜 시간이 소요될 수 있으므로 이를 비동기로 처리해야 합니다.

2. 비동기 작업 처리 방법

Flask-RESTful에서 비동기 작업을 처리하는 가장 일반적인 방법은 asyncioaiohttp를 사용하는 것입니다.

2.1 asyncio 설정

먼저, asyncio를 사용하기 위해 Flask-RESTful 애플리케이션에 asyncio를 설정해야 합니다. 다음과 같이 코드를 작성합니다.

from flask import Flask
from flask_restful import Api

import asyncio

app = Flask(__name__)
api = Api(app)

def run_app():
    app.run()

if __name__ == "__main__":
    loop = asyncio.get_event_loop()
    loop.run_until_complete(run_app())

run_app() 함수를 async로 선언하지 않아도 run_until_complete() 메서드를 호출할 때 자동으로 비동기로 실행됩니다.

2.2 비동기 작업 처리

이제 비동기 작업을 처리하는 예제를 살펴보겠습니다. 아래는 aiohttp를 사용하여 비동기로 네트워크 요청을 보내는 코드입니다.

from flask_restful import Resource
import aiohttp

class MyResource(Resource):
    async def get(self):
        async with aiohttp.ClientSession() as session:
            async with session.get('https://api.example.com') as resp:
                data = await resp.json()
        return data

위의 코드에서 get() 메서드가 비동기로 실행되고, aiohttp를 사용하여 네트워크 요청을 보내고 응답을 받습니다. await 키워드를 사용하여 비동기 함수의 실행을 일시 중단하고 응답을 기다립니다.

3. 참고 자료