# ๐ ๐
๐ ๐ช ๐ฌ โ (๐) ๐ ๐ ๐ ๏ธ โญ ๐ธ **โถ๏ธ ๐**. ๐ โ ๐ ๐ ๐ ๐ ๐ ๏ธ **๐**, **โญ** ๐ธ **โถ๏ธ ๐จ ๐จ**.
๐ ๐, ๐ ๐ช ๐ฌ โ (๐) ๐ ๐ ๐ ๏ธ ๐โ ๐ธ **๐คซ ๐ฝ**. ๐ ๐ผ, ๐ ๐ ๐ ๐ ๏ธ **๐**, **โฎ๏ธ** โ๏ธ ๐ต ๐ฒ **๐ ๐จ**.
โฉ๏ธ ๐ ๐ ๐ ๏ธ โญ ๐ธ **โถ๏ธ** โ ๐จ, & โถ๏ธ๏ธ โฎ๏ธ โซ๏ธ **๐** ๐ ๐จ, โซ๏ธ ๐ ๐ ๐ธ **๐** (๐ค "๐" ๐ โ ๐ฅ ๐ถ).
๐ ๐ช ๐ถ โ โ ๐ **โน** ๐ ๐ ๐ช โ๏ธ ๐ ๐ฑ, & ๐ **๐ฐ** ๐ช ๐จ, &/โ๏ธ ๐ ๐ ๐ช **๐งน ๐** โฎ๏ธ. ๐ผ, ๐ฝ ๐ ๐ฑ, โ๏ธ ๐ ๐ ๐ฐ ๐ซ ๐ท.
## โ๏ธ ๐ผ
โก๏ธ โถ๏ธ โฎ๏ธ ๐ผ **โ๏ธ ๐ผ** & โคด๏ธ ๐ โ โ โซ๏ธ โฎ๏ธ ๐.
โก๏ธ ๐ ๐ ๐ โ๏ธ **๐ฐ ๐ซ ๐ท** ๐ ๐ ๐ โ๏ธ ๐ต ๐จ. ๐ถ
๐ ๐ท ๐ ๐ช ๐จ,, โซ๏ธ ๐ซ 1๏ธโฃ ๐ท ๐ ๐จ, โ๏ธ 1๏ธโฃ ๐ ๐ฉโ๐ป โ๏ธ ๐ณ ๐.
โก๏ธ ๐ ๐ ๐ ๐ท ๐ช **โ ๐ฐ**, โฉ๏ธ โซ๏ธ โ๏ธ โ ๐ **๐ฝ โช๏ธโก๏ธ ๐พ**. ๐ ๐ซ ๐ โซ๏ธ ๐ ๐จ.
๐ ๐ช ๐ โซ๏ธ ๐ ๐ ๐น/๐, โ๏ธ ๐ ๐ โ ๐ โซ๏ธ ๐ **๐ ๐ท** ๐ฅ ๐ ๐โโ ๐
๐ง ๐ฏ, โคด๏ธ ๐ ๐ฏ ๐ **๐** โฉ๏ธ โซ๏ธ ๐ โ๏ธ โ ๐ท ๐ โญ ๐โโ ๐ช ๐ ๐ฌ ๐ ๐.
๐ โซ๏ธโ ๐ฅ ๐ โ, โก๏ธ ๐ ๐ท โญ ๐จ ๐ต, โ๏ธ ๐ด โถ๏ธ๏ธ โญ ๐ธ โถ๏ธ ๐จ ๐จ, ๐ซ โช ๐ โ ๐.
## ๐
๐ ๐ช ๐ฌ ๐ *๐ด* & *๐คซ* โ โ๏ธ `lifespan` ๐ข `FastAPI` ๐ฑ, & "๐ ๐จโ๐ผ" (๐ค ๐ ๐ฆ ๐ โซ๏ธโ ๐ ๐ฅ).
โก๏ธ โถ๏ธ โฎ๏ธ ๐ผ & โคด๏ธ ๐ โซ๏ธ โน.
๐ฅ โ ๐ ๐ข `lifespan()` โฎ๏ธ `yield` ๐ ๐:
```Python hl_lines="16 19"
{!../../../docs_src/events/tutorial003.py!}
```
๐ฅ ๐ฅ โ ๐ฅ *๐ด* ๐ ๏ธ ๐ ๐ท ๐ฎ (โ) ๐ท ๐ข ๐ โฎ๏ธ ๐ฐ ๐ซ ๐ท โญ `yield`. ๐ ๐ ๐ ๐ ๏ธ **โญ** ๐ธ **โถ๏ธ โ ๐จ**, โฎ๏ธ *๐ด*.
& โคด๏ธ, โถ๏ธ๏ธ โฎ๏ธ `yield`, ๐ฅ ๐ ๐ท. ๐ ๐ ๐ ๐ ๏ธ **โฎ๏ธ** ๐ธ **๐ ๐ ๐จ**, โถ๏ธ๏ธ โญ *๐คซ*. ๐ ๐ช, ๐ผ, ๐ โน ๐ ๐พ โ๏ธ ๐ป.
!!! tip
`shutdown` ๐ ๐จ ๐โ ๐ **โ๏ธ** ๐ธ.
๐ฒ ๐ ๐ช โถ๏ธ ๐ โฌ, โ๏ธ ๐ ๐ค ๐ก ๐ โซ๏ธ. ๐คท
### ๐ ๐ข
๐ฅ ๐ ๐, ๐ ๐ฅ โ ๐ ๐ข โฎ๏ธ `yield`. ๐ ๐ถ ๐ ๐ โฎ๏ธ `yield`.
```Python hl_lines="14-19"
{!../../../docs_src/events/tutorial003.py!}
```
๐ฅ ๐ ๐ข, โญ `yield`, ๐ ๐ ๏ธ **โญ** ๐ธ โถ๏ธ.
& ๐ โฎ๏ธ `yield` ๐ ๐ ๏ธ **โฎ๏ธ** ๐ธ โ๏ธ ๐.
### ๐ ๐ ๐จโ๐ผ
๐ฅ ๐ โ
, ๐ข ๐ โฎ๏ธ `@asynccontextmanager`.
๐ ๐ ๐ข ๐ ๐ณ ๐ค "**๐ ๐ ๐จโ๐ผ**".
```Python hl_lines="1 13"
{!../../../docs_src/events/tutorial003.py!}
```
**๐ ๐จโ๐ผ** ๐ ๐ณ ๐ ๐ ๐ช โ๏ธ `with` ๐, ๐ผ, `open()` ๐ช โ๏ธ ๐ ๐จโ๐ผ:
```Python
with open("file.txt") as file:
file.read()
```
โฎ๏ธ โฌ ๐, ๐ค **๐ ๐ ๐จโ๐ผ**. ๐ ๐ โ๏ธ โซ๏ธ โฎ๏ธ `async with`:
```Python
async with lifespan(app):
await do_stuff()
```
๐โ ๐ โ ๐ ๐จโ๐ผ โ๏ธ ๐ ๐ ๐จโ๐ผ ๐ ๐, โซ๏ธโ โซ๏ธ ๐จ ๐, โญ ๐ฌ `with` ๐ซ, โซ๏ธ ๐ ๐ ๏ธ ๐ โญ `yield`, & โฎ๏ธ โ `with` ๐ซ, โซ๏ธ ๐ ๐ ๏ธ ๐ โฎ๏ธ `yield`.
๐ ๐ ๐ผ ๐, ๐ฅ ๐ซ โ๏ธ โซ๏ธ ๐, โ๏ธ ๐ฅ ๐ถโโ๏ธ โซ๏ธ FastAPI โซ๏ธ โ๏ธ โซ๏ธ.
`lifespan` ๐ข `FastAPI` ๐ฑ โ **๐ ๐ ๐จโ๐ผ**, ๐ฅ ๐ช ๐ถโโ๏ธ ๐ ๐ `lifespan` ๐ ๐ ๐จโ๐ผ โซ๏ธ.
```Python hl_lines="22"
{!../../../docs_src/events/tutorial003.py!}
```
## ๐ ๐ (๐ข)
!!! warning
๐ ๐ ๐ต *๐ด* & *๐คซ* โ๏ธ `lifespan` ๐ข `FastAPI` ๐ฑ ๐ฌ ๐.
๐ ๐ช ๐ฒ ๐ถ ๐ ๐.
๐ค ๐ ๐ ๐ฌ ๐ โ ๐ ๏ธ โฎ๏ธ *๐ด* & โฎ๏ธ *๐คซ*.
๐ ๐ช ๐ฌ ๐ ๐โ๐ฆบ (๐ข) ๐ ๐ช ๐ ๏ธ โญ ๐ธ โถ๏ธ ๐, โ๏ธ ๐โ ๐ธ ๐คซ ๐ฝ.
๐ซ ๐ข ๐ช ๐ฃ โฎ๏ธ `async def` โ๏ธ ๐ `def`.
### `startup` ๐
๐ฎ ๐ข ๐ ๐ ๐ โญ ๐ธ โถ๏ธ, ๐ฃ โซ๏ธ โฎ๏ธ ๐ `"startup"`:
```Python hl_lines="8"
{!../../../docs_src/events/tutorial001.py!}
```
๐ ๐ผ, `startup` ๐ ๐โ๐ฆบ ๐ข ๐ ๐ข ๐ฌ "๐ฝ" ( `dict`) โฎ๏ธ ๐ฒ.
๐ ๐ช ๐ฎ ๐
๐ 1๏ธโฃ ๐ ๐โ๐ฆบ ๐ข.
& ๐ ๐ธ ๐ ๐ซ โถ๏ธ ๐จ ๐จ โญ ๐ `startup` ๐ ๐โ๐ฆบ โ๏ธ ๐.
### `shutdown` ๐
๐ฎ ๐ข ๐ ๐ ๐ ๐โ ๐ธ ๐คซ ๐ฝ, ๐ฃ โซ๏ธ โฎ๏ธ ๐ `"shutdown"`:
```Python hl_lines="6"
{!../../../docs_src/events/tutorial002.py!}
```
๐ฅ, `shutdown` ๐ ๐โ๐ฆบ ๐ข ๐ โ โ โธ `"Application shutdown"` ๐ `log.txt`.
!!! info
`open()` ๐ข, `mode="a"` โ "๐ป",, โธ ๐ ๐ฎ โฎ๏ธ โซ๏ธโ ๐ ๐ ๐, ๐ต ๐ โฎ๏ธ ๐.
!!! tip
๐ ๐ ๐ ๐ผ ๐ฅ โ๏ธ ๐ฉ ๐ `open()` ๐ข ๐ ๐ โฎ๏ธ ๐.
, โซ๏ธ ๐ ๐ค/๐
พ (๐ข/๐ข), ๐ ๐ "โ" ๐ โ ๐พ.
โ๏ธ `open()` ๐ซ โ๏ธ `async` & `await`.
, ๐ฅ ๐ฃ ๐ ๐โ๐ฆบ ๐ข โฎ๏ธ ๐ฉ `def` โฉ๏ธ `async def`.
!!! info
๐ ๐ช โ ๐
๐ ๐ซ ๐ ๐โ๐ฆบ ๐ ๐' ๐ฉบ.
### `startup` & `shutdown` ๐ฏโโ๏ธ
๐ค โ ๐ค ๐ โ ๐ *๐ด* & *๐คซ* ๐, ๐ ๐ช ๐ โถ๏ธ ๐ณ & โคด๏ธ ๐ โซ๏ธ, ๐ โน & โคด๏ธ ๐ โซ๏ธ, โ๏ธ.
๐จ ๐ ๐ฝ ๐ข ๐ ๐ซ ๐ฐ โ โ๏ธ ๐ข ๐ฏโโ๏ธ ๐
โ ๐ ๐ ๐ช ๐ช ๐ฒ ๐ ๐ข โ๏ธ ๐ ๐ฑ.
โฉ๏ธ ๐, โซ๏ธ ๐ ๐ โฉ๏ธ โ๏ธ `lifespan` ๐ฌ ๐.
## ๐ก โน
๐ก โน ๐ ๐ค. ๐ถ
๐, ๐ซ ๐ก ๐ง, ๐ ๐ ๐ ๐ ๏ธ, & โซ๏ธ ๐ฌ ๐ ๐ค `startup` & `shutdown`.
## ๐ง ๐ธ
๐ถ โ๏ธ ๐คฏ ๐ ๐ซ ๐ ๐ (๐ด & ๐คซ) ๐ ๐ด ๐ ๏ธ ๐ ๐ธ, ๐ซ [๐ง ๐ธ - ๐ป](./sub-applications.md){.internal-link target=_blank}.