コンテンツにスキップ

バックグラウンドタスク

Starletteには、プロセス内のバックグラウンドタスク用の BackgroundTask クラスが含まれています。

バックグラウンドタスクはレスポンスに添付する必要があり、レスポンスが送信された後にのみ実行されます。

バックエンドタスク

単一のバックグラウンドタスクをレスポンスに追加します。

署名: BackgroundTask(func, *args, **kwargs)

Starlette. applicationからStarletteをインポート
JSONResponseをインポートします。
from starlette. routingインポートルート
from starlette. background import BackgroundTask


...

async def signup(request):
    data=await request. json()
    username=data['username']
    email=data['email']
    task=BackgroundTask(send_welcome_email, to_address=email)
    メッセージ= {'status': 'Signup successful'}
    return JSONResponse(message, background=task)

async def send_welcome_email(to_address):
    ...


ルート=[
    ...
    ルート('/user/signup'、エンドポイント=signup、メソッド=['POST'])
]

app=Starlette(ルート=ルート)

バックエンドタスク

複数のバックグラウンドタスクをレスポンスに追加します。

署名: BackgroundTasks(tasks=[])

Starlette. applicationからStarletteをインポート
JSONResponseをインポートします。
starlette. backgroundからBackgroundTasksをインポート

async def signup(request):
    data=await request. json()
    username=data['username']
    email=data['email']
    タスク=BackgroundTasks()
    task. add_task(send_welcome_email,to_address=email)
    task. add_task(送信_管理者通知,ユーザー名=ユーザー名)
    メッセージ= {'status': 'Signup successful'}
    return JSONResponse(メッセージ、背景=タスク)

async def send_welcome_email(to_address):
    ...

async def send_管理者通知(ユーザー名):
    ...

ルート=[
    ルート('/user/signup'、エンドポイント=signup、メソッド=['POST'])
]

app=Starlette(ルート=ルート)

!!! 重要なタスクは順番に実行されます。いずれかのタスクが例外を引き起こした場合、その後のタスクは実行される機会がありません。