【Python】FastAPIで重い処理をバックグラウンドのタスクとして実行させる方法

Python

概要

  • 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を実行できる。

コメント

タイトルとURLをコピーしました