バックグラウンドタスク
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(ルート=ルート)
!!! 重要なタスクは順番に実行されます。いずれかのタスクが例外を引き起こした場合、その後のタスクは実行される機会がありません。