概要
- FastAPIで重い処理をバックグラウンドで実行させる方法
background_task.add_task
で重い処理をバックグラウンドで処理できる。
Notes
- インストール
pip install fastapi
- ソースコード全体はこんな感じ
from fastapi import FastAPI,BackgroundTasks import time app = FastAPI() # 重い処理を書く。今回は、time_sec秒停止する。 def heavy_task(time_sec): print('heavyなtask開始') time.sleep(time_sec) print('heavyなtask終了') # /runにdataをPostすると、重い処理を裏で動かしてくれる。 @app.post("/run") async def heavytask_run(data,background_task:BackgroundTasks): """ Args: data: int型のデータ background_task: BackgroundTasks """ background_task.add_task(heavy_task,time_sec=int(data)) return {'status':200,'data':data}
fastapiからBackgroundTasks
をインポート
from fastapi import FastAPI,BackgroundTasks import time app = FastAPI()
- 重い処理の関数(heavy_task(time_sec))
heavyなtask開始
という文字が表示されたあと、time_sec秒停止して、heavyなtask終了
と表示されます。
def heavy_task(time_sec): print('heavyなtask開始') time.sleep(time_sec) print('heavyなtask終了')
- 引数には、background_taskのデータ型として、importしたBackgroundTasksを設定
- background_task.add(関数名,引数)として、設定する。
# /runにdataをPostすると、重い処理を裏で動かしてくれる。 @app.post("/run") async def heavytask_run(data,background_task:BackgroundTasks): """ Args: data: int型のデータ background_task: BackgroundTasks """ background_task.add_task(heavy_task,time_sec=int(data)) return {'status':200,'data':data}
これで/runに対してPOSTすると、バックグラウンドで関数heavy_taskを実行できる。
コメント