コンテンツにスキップ

イベント: 起動時 - シャットダウン時

アプリケーションの起動前やシャットダウン時に実行する必要のあるイベントハンドラ(関数)を定義することができます。

これらの関数は、 async def または通常の def で宣言することができます。

!!! warning "警告" メインアプリケーションのイベントハンドラのみが実行され、サブアプリケーション - マウントでは実行されません。

startup イベント

アプリケーションが起動する前に実行されるべき関数を追加するには、イベント "startup" と共に宣言します。


この場合、startupイベントハンドラ関数は、いくつかの値でアイテムの "データベース"(単なるdict)を初期化します。

イベントハンドラ関数は、複数追加することができます。

そして、すべての startup イベントハンドラが完了するまで、アプリケーションはリクエストを受け取り始めません。

shutdown イベント

アプリケーションがシャットダウンするときに実行されるべき関数を追加するには、イベント "shutdown" と共に宣言します。


ここでは、shutdown イベントハンドラ関数が "Application shutdown" というテキスト行をファイル log.txt に書き出します。

!!! info "情報" open()関数の中の、mode="a" は「追加」を意味し、そのファイルの前の内容に上書きすることなく、あるものの後に行を追加します。

!!! note "技術詳細" この場合、ファイルとインタラクトする標準的なPythonの open() 関数を使用していることに注意してください。

つまり、I/O (入力/出力)を伴うため、ディスクに書き込まれるのを「待つ」必要があります。

しかし、`open()` は `async` と `await` を使えません。

そのため、イベントハンドラ関数を `async def` ではなく、標準の `def` で宣言します。

!!! info "情報" これらのイベントハンドラについて、詳しくは Starletteのイベントのドキュメントをご覧ください。