[python] Flask-RESTful에서 비동기 작업 처리 방법
Flask-RESTful은 Python 웹 프레임워크인 Flask의 확장판으로, RESTful API를 쉽게 개발할 수 있도록 도와줍니다. 비동기 작업을 처리해야 할 때 Flask-RESTful에서 어떻게 처리할 수 있는지 알아보겠습니다.
1. 비동기 작업이란?
비동기 작업은 하나의 작업이 완료될 때까지 기다리지 않고 다른 작업을 수행하는 것을 의미합니다. 예를 들어, 네트워크 요청이나 데이터베이스 쿼리 등은 오랜 시간이 소요될 수 있으므로 이를 비동기로 처리해야 합니다.
2. 비동기 작업 처리 방법
Flask-RESTful에서 비동기 작업을 처리하는 가장 일반적인 방법은 asyncio
와 aiohttp
를 사용하는 것입니다.
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
키워드를 사용하여 비동기 함수의 실행을 일시 중단하고 응답을 기다립니다.