From: ILoveTakanashiHoshino <114038930+ILoveSorasakiHina@users.noreply.github.com>
Date: Wed, 27 Nov 2024 23:10:08 +0000 (+0800)
Subject: 🌐 Add Traditional Chinese translation for `docs/zh-hant/docs/async.md` (#12990)
X-Git-Tag: 0.115.6~4
X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=53c87842b0a756375f93e78027b43b721b3eb9cf;p=thirdparty%2Ffastapi%2Ffastapi.git
🌐 Add Traditional Chinese translation for `docs/zh-hant/docs/async.md` (#12990)
---
diff --git a/docs/zh-hant/docs/async.md b/docs/zh-hant/docs/async.md
new file mode 100644
index 0000000000..6ab75d2abb
--- /dev/null
+++ b/docs/zh-hant/docs/async.md
@@ -0,0 +1,442 @@
+# 並è¡è async / await
+
+æé*è·¯å¾æä½å½å¼*ç `async def` èªæ³çç´°ç¯èé忥 (asynchronous) ç¨å¼ç¢¼ãä¸¦è¡ (concurrency) èå¹³è¡ (parallelism) çä¸äºèæ¯ç¥èã
+
+## è¶æéå?
+
+TL;DR:
+
+å¦æä½ æ£å¨ä½¿ç¨è¦æ±ä½ 以 `await` èªæ³å¼å«çç¬¬ä¸æ¹å½å¼åº«ï¼ä¾å¦ï¼
+
+```Python
+results = await some_library()
+```
+
+ç¶å¾ï¼ä½¿ç¨ `async def` 宣åä½ ç*è·¯å¾æä½å½å¼*ï¼
+
+
+```Python hl_lines="2"
+@app.get('/')
+async def read_results():
+ results = await some_library()
+ return results
+```
+
+/// note | 注æ
+
+ä½ åªè½å¨ `async def` 建ç«çå½å¼å
§ä½¿ç¨ `await`ã
+
+///
+
+---
+
+å¦æä½ ä½¿ç¨çæ¯ç¬¬ä¸æ¹å½å¼åº«ä¸¦ä¸å®éè¦èæäºå¤é¨è³æºï¼ä¾å¦è³æåº«ãAPIãæªæ¡ç³»çµ±çï¼é²è¡éè¨ï¼ä½ä¸æ¯æ´ `await`ï¼ç®å大夿¸è³æåº«å½å¼åº«é½æ¯é樣ï¼ï¼å¨é種æ
æ³ä¸ï¼ä½ å¯ä»¥å平叏䏿¨£ä½¿ç¨ `def` 宣å*è·¯å¾æä½å½å¼*ï¼å¦ä¸æç¤ºï¼
+
+```Python hl_lines="2"
+@app.get('/')
+def results():
+ results = some_library()
+ return results
+```
+
+---
+
+å¦æä½ çæç¨ç¨å¼ä¸éè¦èå¤é¨è³æºé²è¡ä»»ä½éè¨ä¸¦çå¾
å
¶åæï¼è«ä½¿ç¨ `async def`ã
+
+---
+
+å¦æä½ ä¸ç¢ºå®è©²ç¨åªåï¼ç´æ¥ç¨ `def` 就好ã
+
+---
+
+**注æ**ï¼ä½ å¯ä»¥å¨*è·¯å¾æä½å½å¼*䏿··åä½¿ç¨ `def` å `async def` ï¼ä¸¦ä½¿ç¨æé©åä½ éæ±çæ¹å¼ä¾å®ç¾©æ¯åå½å¼ãFastAPI æå¹«ä½ åæ£ç¢ºçèçã
+
+ç¡è«å¦ä½ï¼å¨ä¸è¿°åªç¨®æ
æ³ä¸ï¼FastAPI ä»å°ä»¥é忥æ¹å¼éè¡ï¼ä¸¦ä¸é度é常快ã
+
+ä½éééµå¾ªä¸è¿°æ¥é©ï¼å®å°è½é²è¡ä¸äºæè½æä½³åã
+
+## æè¡ç´°ç¯
+
+ç¾ä»£çæ¬ç Python æ¯æ´ä½¿ç¨ **ãåç¨ã** ç **`async` å `await`** èªæ³ä¾å¯« **ãé忥ç¨å¼ç¢¼ã**ã
+
+æ¥ä¸ä¾æåéä¸ä»ç´¹ï¼
+
+* **é忥ç¨å¼ç¢¼**
+* **`async` å `await`**
+* **åç¨**
+
+## é忥ç¨å¼ç¢¼
+
+é忥ç¨å¼ç¢¼å
æå³èç¨å¼èªè¨ ð¬ æè¾¦æ³å訴é»è
¦/ç¨å¼ ð¤ å¨ç¨å¼ç¢¼ä¸çæåé»ï¼å® ð¤ éè¦çå¾
æäºäºæ
宿ãè®æååè¨éäºäºæ
被稱çºãæ
¢éæªæ¡ãðã
+
+å æ¤ï¼å¨çå¾
ãæ
¢éæªæ¡ãð 宿çéæ®µæéï¼é»è
¦å¯ä»¥å»èçä¸äºå
¶ä»å·¥ä½ã
+
+æ¥èç¨å¼ ð¤ æå¨æç©ºæªæå便¥çæ¯å¦æçå¾
çå·¥ä½å·²ç¶å®æï¼ä¸¦å·è¡å¿
è¦çå¾çºæä½ã
+
+æ¥ä¸ä¾ï¼å® ð¤ å®æç¬¬ä¸åå·¥ä½ï¼ä¾å¦æåçãæ
¢éæªæ¡ãðï¼ä¸¦ç¹¼çºå·è¡ç¸éçæææä½ã
+éåãçå¾
å
¶ä»äºæ
ãé常æçæ¯ä¸äºç¸å°è¼æ
¢çï¼èèçå¨å RAM è¨æ¶é«çéåº¦ç¸æ¯ï¼ç I/O æä½ï¼æ¯å¦èªªï¼
+
+* éé網路å³éä¾èªç¨æ¶ç«¯çè³æ
+* å¾ç¶²è·¯æ¥æ¶ä¾èªç¨æ¶ç«¯çè³æ
+* å¾ç£ç¢è®åæªæ¡å
§å®¹
+* å°å
§å®¹å¯«å
¥ç£ç¢
+* é 端 API æä½
+* è³æåº«æä½
+* è³æåº«æ¥è©¢
+* çç
+
+ç±æ¼å¤§é¨åçå·è¡æé齿¶èå¨çå¾
I/O æä½ä¸ï¼å æ¤éäºæä½è¢«ç¨±çº "I/O å¯éå" æä½ã
+
+ä¹æä»¥ç¨±çºãé忥ãï¼æ¯å çºé»è
¦/ç¨å¼ä¸éè¦èé£äºèæçä»»åã忥ãï¼çå¾
ä»»å宿ç精確æéï¼ç¶å¾æè½åå¾çµæä¸¦ç¹¼çºå·¥ä½ã
+
+ç¸åå°ï¼éåæ¥ç³»çµ±å¨ä»»å宿å¾ï¼å¯ä»¥è®ä»»åç¨å¾®çä¸ä¸ï¼å¹¾å¾®ç§ï¼ï¼çå¾
é»è
¦/ç¨å¼å®ææé ä¸çå
¶ä»å·¥ä½ï¼ç¶å¾ååä¾åå¾çµæç¹¼çºé²è¡ã
+
+ç¸å°æ¼ãé忥ãï¼asynchronousï¼ï¼ã忥ãï¼synchronousï¼ä¹å¸¸è¢«ç¨±ä½ãé åºæ§ãï¼sequentialï¼ï¼å çºé»è
¦/ç¨å¼æä¾åºå·è¡æææ¥é©ï¼å³ä¾¿éäºæ¥é©æ¶åçå¾
ï¼ææåæå°å
¶ä»ä»»åã
+
+### 並è¡èæ¼¢å ¡
+
+ä¸è¿°é忥ç¨å¼ç¢¼çæ¦å¿µææä¹è¢«ç¨±çºã並è¡ãï¼å®ä¸åæ¼ãå¹³è¡ãã
+
+並è¡åå¹³è¡é½è "ä¸åçäºæ
æå¤æå°åæç¼ç" æéã
+
+ä½ä¸¦è¡åå¹³è¡ä¹éçç´°ç¯æ¯å®å
¨ä¸åçã
+
+çºäºç解差ç°ï¼è«æ³å以䏿鿼¢å ¡çæ
äºï¼
+
+### ä¸¦è¡æ¼¢å ¡
+
+ä½ åä½ çæäººå»éé£åºï¼æéçåæï¼æ¶é塿£å¨å¹«æå¨ä½ åé¢ç人é»é¤ãð
+
+
+
+輪å°ä½ äºï¼ä½ çµ¦ä½ èä½ çæäººé»äºå
©åè±ªè¯æ¼¢å ¡ãðð
+
+
+
+æ¶éå¡éç¥å»æ¿æºåä½ çæ¼¢å ¡ï¼å管ä»åéå¨çºåé¢å
¶ä»é¡§å®¢æºåé£ç©ï¼ã
+
+
+
+ä¹å¾ä½ 宿仿¬¾ãð¸
+
+æ¶éå¡çµ¦ä½ ä¸åè碼çã
+
+
+
+å¨çå¾
æ¼¢å ¡çåæï¼ä½ å¯ä»¥èæäººé¸ä¸å¼µæ¡åï¼ç¶å¾åä¸ä¾èå¾é·ä¸æ®µæéï¼å çºæ¼¢å ¡åå豪è¯ï¼æºåç¹å¥è²»å·¥ãï¼
+
+éæ®µæéï¼ä½ éè½æ¬£è³ä½ çæäººæå¤éº¼ç坿ãè°æè迷人ãâ¨ðâ¨
+
+
+
+ç¶ä½ åæäººéè天éçå¾
æï¼ä½ æä¸æå°æ¥çæ«æª¯ä¸ç顯示çè碼ï¼ç¢ºèªæ¯å¦å·²ç¶è¼ªå°ä½ äºã
+
+ç¶å¾å¨æåæå»ï¼çµæ¼è¼ªå°ä½ äºãä½ èµ°å°æ«æª¯ï¼æ¿äºæ¼¢å ¡ï¼ç¶å¾åå°æ¡åä¸ã
+
+
+
+ä½ åæäººäº«ç¨éé 大é¤ï¼æ´åéç¨ååéå¿â¨
+
+
+
+/// info
+
+æ¼äº®çæç«ä¾èª Ketrina Thompson. ð¨
+
+///
+
+---
+
+æ³åä½ æ¯æ
äºä¸çé»è
¦æç¨å¼ ð¤ã
+
+ç¶ä½ æéæï¼ä½ 卿¾ç©ºð´ï¼çå¾
輪å°ä½ ï¼æ²æåä»»ä½ãçç¢æ§ãçäºæ
ãä½éæ²éä¿ï¼å çºæ¶éå¡åªæ¯æ¥å®ï¼è䏿¯æºåé£ç©ï¼ï¼æä»¥æéé度å¾å¿«ã
+
+ç¶å¾ï¼ç¶è¼ªå°ä½ æï¼ä½ éå§åçæ£ãæçç¢åãçå·¥ä½ï¼èçèå®ï¼æ±ºå®ä½ æ³è¦ä»éº¼ï¼æ¿æäººé¸æé¤é»ï¼ä»æ¬¾ï¼ç¢ºèªä½ çµ¦äºæ£ç¢ºçå¸³å®æä¿¡ç¨å¡ï¼æª¢æ¥ä½ æ¯å¦è¢«æ£ç¢ºæ¶è²»ï¼ç¢ºèªè¨å®ä¸çé
ç®æ¯å¦æ£ç¢ºççã
+
+使¯ï¼å³ä½¿ä½ éæ²ææ¿å°æ¼¢å ¡ï¼ä½ èæ¶éå¡çå·¥ä½å·²ç¶ãæ«åãäº â¸ï¼å çºä½ å¿
é çå¾
ð æ¼¢å ¡æºå好ã
+
+ä½ç¶ä½ é¢éæ«æª¯ï¼åå°æ¡åæï¼æ¿è屬æ¼ä½ çè碼çå¾
æï¼ä½ å¯ä»¥ææ³¨æå ð è½ç§»å°æäººèº«ä¸ï¼ä¸¦éå§ãå·¥ä½ã⯠ð¤ââä¹å°±æ¯åæäººèª¿æ
ðãéæä½ åéå§åä¸äºé常ãæçç¢åãçäºæ
ã
+
+æ¥èï¼æ¶éå¡ ð å°ä½ çèç¢¼é¡¯ç¤ºå¨æ«æª¯è¢å¹ä¸ï¼ä¸¦åè¨´ä½ ãæ¼¢å ¡å·²ç¶å好äºããä½ä½ 䏿ççå°ç«å»è·³èµ·ä¾ï¼å çºé¡¯ç¤ºçèç¢¼è®æäºä½ çãä½ ç¥éæ²æäººææ¶èµ°ä½ çæ¼¢å ¡ï¼å çºä½ æèªå·±çè碼ï¼ä»å乿ä»åçè碼ã
+
+æä»¥ä½ æçæäººè¬å®æ
äºï¼å®æç¶åçå·¥ä½ â¯/æ£å¨é²è¡çä»»å ð¤ï¼ï¼ç¶å¾å¾®ç¬è溫æå°èªªä½ è¦å»æ¿æ¼¢å ¡äº â¸ã
+
+ç¶å¾ä½ èµ°åæ«æª¯ ðï¼åå°å·²ç¶å®æçæåä»»å â¯ï¼æ¿èµ·æ¼¢å ¡ï¼èªªè²è¬è¬ï¼ä¸¦å¸¶åæ¡ä¸ãéå°±çµæäºèæ«æª¯çäºåæ¥é©/ä»»å â¹ï¼æ¥ä¸ä¾æç¢çä¸åæ°çä»»åï¼ãåæ¼¢å ¡ã ð â¯ï¼èå
åçãæ¿æ¼¢å ¡ãä»»åå·²ç¶å®æäº â¹ã
+
+### å¹³è¡æ¼¢å ¡
+
+ç¾å¨ï¼è®æå便³åéè£¡ä¸æ¯ãä¸¦è¡æ¼¢å ¡ãï¼èæ¯ãå¹³è¡æ¼¢å ¡ãã
+
+ä½ åæäººä¸èµ·å»åå¹³è¡çéé£é¤ã
+
+ä½ åç«å¨éä¼ä¸ï¼å颿幾ä½ï¼åè¨æ 8 ä½ï¼æ¢æ¯æ¶éå¡åæ¯å»å¸«çå¡å·¥ï¼ä»ååææ¥å®ä¸¦æºåé¤é»ã
+
+æææå¨ä½ åé¢ç人é½å¨çèä»åçæ¼¢å ¡æºå好徿æé¢éæ«æª¯ï¼å çºæ¯ä½æ¶éå¡å¨æ¥å®å®å¾ï¼é¦¬ä¸æå»æºåæ¼¢å ¡ï¼ç¶å¾æåä¾èçä¸ä¸åè¨å®ã
+
+
+
+çµæ¼è¼ªå°ä½ äºï¼ä½ çºä½ åä½ çæäººé»äºå
©åé常豪è¯çæ¼¢å ¡ã
+
+ä½ ä»æ¬¾äº ð¸ã
+
+
+
+æ¶éå¡èµ°é²å»æ¿æºåé£ç©ã
+
+ä½ ç«å¨æ«æª¯åçå¾
ðï¼ä»¥å
å
¶ä»äººå
æ¿èµ°ä½ çæ¼¢å ¡ï¼å çºéè£¡æ²æè碼ç系統ã
+
+
+
+ç±æ¼ä½ åæäººé½å¿èä¸è®å¥äººæ¶èµ°ä½ çæ¼¢å ¡ï¼çæ¼¢å ¡æºå好æï¼ä½ æ ¹æ¬ç¡æ³å°å¿åæäººäºåãð
+
+鿝ã忥ã(synchronous)å·¥ä½ï¼ä½ åæ¶éå¡/å»å¸« ð¨âð³ æ¯ã忥åãçãä½ å¿
é çå° ð æ¶éå¡/å»å¸« ð¨âð³ å®ææ¼¢å ¡ä¸¦äº¤çµ¦ä½ çé£ä¸å»ï¼å¦åå¥äººå¯è½ææ¿èµ°ä½ çé¤é»ã
+
+
+
+æçµï¼ç¶éé·æéççå¾
ðï¼æ¶éå¡/å»å¸« ð¨âð³ æ¿èæ¼¢å ¡åä¾äºã
+
+
+
+ä½ æ¿èæ¼¢å ¡ï¼åä½ çæäººåå°é¤æ¡ã
+
+ä½ åå
å
æ¯å宿¼¢å ¡ï¼ç¶å¾å°±çµæäºãâ¹
+
+
+
+æ´åéç¨ä¸æ²æå¤ªå¤çè«æ
說æï¼å çºå¤§é¨åæé ð é½è±å¨æ«æª¯åçå¾
ãð
+
+/// info
+
+æ¼äº®çæç«ä¾èª Ketrina Thompson. ð¨
+
+///
+
+---
+
+å¨éåå¹³è¡æ¼¢å ¡çæ
å¢ä¸ï¼ä½ æ¯ä¸åç¨å¼ ð¤ 䏿å
©åèçå¨ï¼ä½ åæäººï¼ï¼å
©è
é½å¨çå¾
ð 䏦尿³¨æ¼çå¾
æ«æª¯ä¸çé¤é» ðï¼çå¾
çæéé常é·ã
+
+éå®¶éé£åºæ 8 åèçå¨ï¼æ¶éå¡/å»å¸«ï¼ãèä¸¦è¡æ¼¢å ¡åºå¯è½åªæ 2 åèçå¨ï¼ä¸ä½æ¶éå¡åä¸ä½å»å¸«ï¼ã
+
+åç®¡å¦æ¤ï¼æçµçé«é©ä¸¦ä¸æ¯æçæ³çãð
+
+---
+
+éæ¯èæ¼¢å ¡é¡ä¼¼çæ
äºãð
+
+ä¸åæ´ãç¾å¯¦ãçä¾åï¼æ³åä¸ééè¡ã
+
+ç´å°æè¿ï¼å¤§å¤æ¸éè¡é½æå¤ä½åºç´å¡ ð¨âð¼ð¨âð¼ð¨âð¼ð¨âð¼ï¼ä»¥å䏿¢é·é·çéä¼ ððððððððã
+
+ææçåºç´å¡é½å¨ä¸åæ¥ä¸åå°æ»¿è¶³æ¯ä½å®¢æ¶çææéæ± ð¨âð¼â¯ã
+
+ä½ å¿
é é·æéæé ðï¼ä¸ç¶å°±æå¤±å»æ©æã
+
+æä»¥ï¼ä½ 䏿æ³å¸¶ä½ çæäºº ð ä¸èµ·å»éè¡è¾¦äº ð¦ã
+
+### æ¼¢å ¡çµè«
+
+å¨ãåæäººä¸èµ·åé飿¼¢å ¡ãçéåå ´æ¯ä¸ï¼ç±æ¼æå¤§éççå¾
ðï¼ä½¿ç¨ä¸¦è¡ç³»çµ± â¸ðâ¯ æ´ææç¾©ã
+
+é乿¯å¤§å¤æ¸ Web æç¨çæ
æ³ã
+
+許å¤ç¨æ¶æ£å¨ä½¿ç¨ä½ çæç¨ç¨å¼ï¼èä½ ç伺æå¨åå¨çå¾
ð éäºç¨æ¶ä¸é£éº¼ç©©å®ç網路ä¾å³éè«æ±ã
+
+æ¥èï¼å次çå¾
ð åæã
+
+é種ãçå¾
ã ð é常以微ç§ä¾è¡¡éï¼ä½ç´¯å èµ·ä¾ï¼æçµéæ¯è±è²»äºå¾å¤çå¾
æéã
+
+éå°±æ¯çºä»éº¼å°æ¼ Web API ä¾èªªï¼ä½¿ç¨é忥ç¨å¼ç¢¼ â¸ð⯠æ¯é常ææç¾©çã
+
+é種é¡åçéåæ¥æ§æ£æ¯ NodeJS æåçåå ï¼å管 NodeJS 䏿¯å¹³è¡çï¼ï¼é乿¯ Go èªè¨ä½çºç¨å¼èªè¨çä¸å強大åªå¢ã
+
+éè **FastAPI** æè½æä¾çæ§è½æ°´å¹³ç¸åã
+
+ä½ å¯ä»¥åæå©ç¨ä¸¦è¡æ§åå¹³è¡æ§ï¼é²ä¸æ¥æåæè½ï¼éæ¯å¤§å¤æ¸å·²æ¸¬è©¦ç NodeJS æ¡æ¶é½æ´å¿«ï¼ä¸¦ä¸è Go èªè¨ç¸ç¶ï¼è Go æ¯ä¸ç¨®æ´æ¥è¿ C çç·¨è¯èªè¨ï¼æè¬ Starletteï¼ã
+
+### ä¸¦è¡æ¯å¹³è¡æ´å¥½åï¼
+
+䏿¯çï¼é䏿¯æ
äºçæ¬æã
+
+並è¡èå¹³è¡ä¸åã並è¡å¨æäº **ç¹å®** çéè¦å¤§éçå¾
çæ
å¢ä¸è¡¨ç¾æ´å¥½ãæ£å 妿¤ï¼ä¸¦è¡å¨ Web æç¨ç¨å¼éç¼ä¸é常æ¯å¹³è¡æ´æåªå¢ãä½ä¸¦ä¸æ¯æææ
å¢é½å¦æ¤ã
+
+å æ¤ï¼çºäºå¹³è¡¡å ±å°ï¼æ³åä¸é¢éåçæ
äº
+
+> ä½ éè¦ææä¸éå大åé«çæ¿åã
+
+*æ¯çï¼éå°±æ¯å
¨é¨çæ
äºã*
+
+---
+
+éè£¡æ²æä»»ä½éè¦çå¾
ð çå°æ¹ï¼åªéè¦å¨æ¿åçå¤åå°æ¹é²è¡å¤§éçå·¥ä½ã
+
+ä½ å¯ä»¥åæ¼¢å ¡çä¾å飿¨£è¼ªæµé²è¡ï¼å
ææå®¢å»³ï¼åææå»æ¿ï¼ä½ç±æ¼ä½ ä¸éè¦çå¾
ð ä»»ä½äºæ
ï¼åªéè¦æçºå°ææï¼è¼ªæµä¸¦ä¸æå½±é¿ä»»ä½çµæã
+
+ç¡è«è¼ªæµå·è¡èå¦ï¼ä¸¦è¡ï¼ï¼ä½ é½éè¦ç¸åçå·¥æå®æä»»åï¼åæéè¦å·è¡ç¸åå·¥ä½éã
+
+使¯ï¼å¨é種æ
å¢ä¸ï¼å¦æä½ å¯ä»¥éè«8ä½åæ¶éå¡/å»å¸«ï¼ç¾å¨æ¯æ¸
æ½å·¥ï¼ä¾å¹«å¿ï¼æ¯å人ï¼å ä¸ä½ ï¼è² 責æ¿åçæåååï¼éæ¨£ä½ å°±å¯ä»¥ **å¹³è¡** å°æ´å¿«å®æå·¥ä½ã
+
+å¨éåå ´æ¯ä¸ï¼æ¯åæ¸
æ½å·¥ï¼å
æ¬ä½ ï¼é½æ¯ä¸åèçå¨ï¼å®æå·¥ä½çä¸é¨åã
+
+ç±æ¼å¤§å¤æ¸çå·è¡æéé½è±å¨å¯¦éçå·¥ä½ä¸ï¼è䏿¯çå¾
ï¼ï¼èé»è
¦ä¸çå·¥ä½ç± CPU 宿ï¼å æ¤éäºåé¡è¢«ç¨±çºãCPU å¯éåãã
+
+---
+
+常è¦ç CPU å¯éåæä½ç¯ä¾å
æ¬é£äºéè¦é²è¡è¤éæ¸å¸è¨ç®çä»»åã
+
+ä¾å¦ï¼
+
+* **é³è¨**æ**ååèç**ï¼
+* **é»è
¦è¦è¦º**ï¼ä¸å¼µåçç±æ¸ç¾è¬ååç´ çµæï¼æ¯ååç´ æ 3 åå¼/é¡è²ï¼èçéäºåç´ é常éè¦åæé²è¡å¤§éè¨ç®ï¼
+* **æ©å¨å¸ç¿**: é常éè¦å¤§éçãç©é£ãåãåéãéç®ãæ³åä¸åå
嫿¸åç巨大é»åè¡¨æ ¼ï¼ä¸¦ææçæ¸ååæç¸ä¹;
+* **深度å¸ç¿**: 鿝æ©å¨å¸ç¿çåé åï¼å樣é©ç¨ãåªä¸ééä¸å
å
æ¯ä¸å¼µæ¸åè¡¨æ ¼ï¼èæ¯å¤§éçæ¸æéåï¼ä¸¦ä¸å¨å¾å¤æ
æ³ä¸ï¼ä½ æä½¿ç¨ç¹æ®çèçå¨ä¾æ§å»ºæä½¿ç¨éäºæ¨¡åã
+
+### ä¸¦è¡ + å¹³è¡: Web + æ©å¨å¸ç¿
+
+ä½¿ç¨ **FastAPI**ï¼ä½ å¯ä»¥å©ç¨ä¸¦è¡çåªå¢ï¼éå¨ Web éç¼ä¸é常常è¦ï¼é乿¯ NodeJS çæå¤§å¸å¼åï¼ã
+
+ä½ä½ ä¹å¯ä»¥å©ç¨å¹³è¡èå¤è¡ç¨ (multiprocessing)ï¼è®å¤åè¡ç¨åæéè¡ï¼ çåªå¢ä¾èçæ©å¨å¸ç¿ç³»çµ±ä¸ç **CPU å¯éå**å·¥ä½ã
+
+éä¸é»ï¼åå ä¸ Python æ¯ **è³æç§å¸**ãæ©å¨å¸ç¿ï¼å°¤å
¶æ¯æ·±åº¦å¸ç¿ç主è¦èªè¨ï¼è® **FastAPI** æçºè³æç§å¸/æ©å¨å¸ç¿ Web API åæç¨ç¨å¼ï¼ä»¥å許å¤å
¶ä»æç¨ç¨å¼ï¼ççµä½³é¸æã
+
+æ³äºè§£å¦ä½å¨çç¢ç°å¢ä¸å¯¦ç¾éç¨®å¹³è¡æ§ï¼è«åè¦ [é¨å±¬](deployment/index.md){.internal-link target=_blank}ã
+
+## `async` å `await`
+
+ç¾ä»£ Python çæ¬æä¾ä¸ç¨®é常ç´è§çæ¹å¼å®ç¾©é忥ç¨å¼ç¢¼ãé使å¾å®çèµ·ä¾å°±åæ£å¸¸çãé åºãç¨å¼ç¢¼ï¼ä¸¦å¨é©ç¶çææ©ãçå¾
ãã
+
+ç¶æåæä½éè¦çå¾
æè½åå³çµæï¼ä¸¦ä¸æ¯æ´éäºæ°ç Python ç¹æ§æï¼ä½ å¯ä»¥å鿍£ç·¨å¯«ç¨å¼ç¢¼ï¼
+
+```Python
+burgers = await get_burgers(2)
+```
+
+é裡çé鵿¯ `await`ãå®å訴 Python å¿
é çå¾
⸠`get_burgers(2)` 宿å®çå·¥ä½ ðï¼ ç¶å¾å°çµæå²åå¨ `burgers` ä¸ã妿¤ï¼Python å°±å¯ä»¥å¨æ¤æéå»èçå
¶ä»äºæ
ð ⯠ï¼ä¾å¦æ¥æ¶å¦ä¸åè«æ±ï¼ã
+
+è¦è® `await` éä½ï¼å®å¿
é 使¼æ¯æé忥åè½çå½å¼å
§ãçºæ¤ï¼åªéä½¿ç¨ `async def` 宣åå½å¼ï¼
+
+```Python hl_lines="1"
+async def get_burgers(number: int):
+ # Do some asynchronous stuff to create the burgers
+ return burgers
+```
+
+...è䏿¯ `def`:
+
+```Python hl_lines="2"
+# This is not asynchronous
+def get_sequential_burgers(number: int):
+ # Do some sequential stuff to create the burgers
+ return burgers
+```
+
+ä½¿ç¨ `async def`ï¼Python Python ç¥éå¨è©²å½å¼å
§éè¦æ³¨æ `await`ï¼ä¸¦ä¸å®å¯ä»¥ãæ«åã ⸠å·è¡è©²å½å¼ï¼ç¶å¾å·è¡å
¶ä»ä»»å ð å¾åä¾ã
+
+ç¶ä½ æ³è¦å¼å« `async def` å½å¼æï¼å¿
é 使ç¨ãawaitããå æ¤ï¼é樣寫å°ç¡æ³éè¡ï¼
+
+```Python
+# This won't work, because get_burgers was defined with: async def
+burgers = get_burgers(2)
+```
+
+---
+
+å¦æä½ æ£å¨ä½¿ç¨æåå½å¼åº«ï¼å®åè¨´ä½ å¯ä»¥ä½¿ç¨ `await` å¼å«å®ï¼é£éº¼ä½ éè¦ç¨ `async def` å®ç¾©*è·¯å¾æä½å½å¼*ï¼å¦ï¼
+
+```Python hl_lines="2-3"
+@app.get('/burgers')
+async def read_burgers():
+ burgers = await get_burgers(2)
+ return burgers
+```
+
+### æ´å¤æè¡ç´°ç¯
+
+ä½ å¯è½å·²ç¶æ³¨æå°ï¼`await` åªè½å¨ `async def` å®ç¾©çå½å¼å
§ä½¿ç¨ã
+
+ä½åæï¼ä½¿ç¨ `async def` å®ç¾©çå½å¼æ¬èº«ä¹å¿
é 被ãçå¾
ããæä»¥ï¼å¸¶æ `async def` å½å¼åªè½å¨å
¶ä»ä½¿ç¨ `async def` å®ç¾©çå½å¼å
§å¼å«ã
+
+é£éº¼ï¼éå°±åãå
æé鿝å
æèãçåé¡ï¼è¦å¦ä½å¼å«ç¬¬ä¸å `async` å½å¼å¢ï¼
+
+å¦æä½ ä½¿ç¨ FastAPIï¼ç¡éæå¿éååé¡ï¼å çºã第ä¸åãå½å¼å°æ¯ä½ ç*è·¯å¾æä½å½å¼*ï¼FastAPI æç¥éå¦ä½æ£ç¢ºèçéååé¡ã
+
+ä½å¦æä½ æ³å¨æ²æ FastAPI çæ
æ³ä¸ä½¿ç¨ `async` / `await`ï¼ä½ ä¹å¯ä»¥é樣åã
+
+### 編寫èªå·±çé忥ç¨å¼ç¢¼
+
+Starlette ï¼å **FastAPI**ï¼ æ¯åºæ¼ AnyIO 實ä½çï¼é使å¾å®åè Python æ¨æºå½å¼åº«ç¸å®¹ asyncio å Trioã
+
+ç¹å¥æ¯ï¼ä½ å¯ä»¥ç´æ¥ä½¿ç¨ AnyIO ä¾èçæ´è¤éç並è¡ä½¿ç¨æ¡ä¾ï¼éäºæ¡ä¾éè¦ä½ å¨èªå·±çç¨å¼ç¢¼ä¸ä½¿ç¨æ´é«éçæ¨¡å¼ã
+
+å³ä½¿ä½ ä¸ä½¿ç¨ **FastAPI**ï¼ä½ ä¹å¯ä»¥ä½¿ç¨ AnyIO 便°å¯«èªå·±çé忥æç¨ç¨å¼ï¼ä¸¦ç²å¾é«ç¸å®¹æ§åä¸äºå¥½èï¼ä¾å¦çµæ§å並è¡ï¼ã
+
+### å
¶ä»å½¢å¼çé忥ç¨å¼ç¢¼
+
+ä½¿ç¨ `async` å `await` çé¢¨æ ¼å¨èªè¨ä¸ç¸å°è¼æ°ã
+
+ä½å®ä½¿èçç°æ¥ç¨å¼ç¢¼è®å¾æ´å 容æã
+
+ç¸åçèªæ³ï¼æå¹¾ä¹ç¸åçèªæ³ï¼æè¿ä¹è¢«å
å«å¨ç¾ä»£ JavaScriptï¼ç¡è«æ¯ç覽å¨éæ¯ NodeJSï¼ä¸ã
+
+ä½å¨æ¤ä¹åï¼èçç°æ¥ç¨å¼ç¢¼è¦æ´å è¤éåå°é£ã
+
+å¨è¼èç Python çæ¬ä¸ï¼ä½ å¯è½æä½¿ç¨å¤å·è¡ç·æ Geventãä½éäºç¨å¼ç¢¼è¦æ´é£ä»¥çè§£ã調試åæèã
+
+å¨è¼èç NodeJS / çè¦½å¨ JavaScript ä¸ï¼ä½ æä½¿ç¨ãåå¼ãï¼éå¯è½æå°è´åå¼å°çã
+
+## åç¨
+
+**åç¨** åªæ¯ `async def` å½å¼æåå³çéå¸¸ç¹æ®çäºç©å稱ãPython ç¥é宿¯ä¸åé¡ä¼¼å½å¼çæ±è¥¿ï¼å¯ä»¥ååå®ï¼ä¸¦ä¸å¨æåæå»å®æçµæï¼ä½å®ä¹å¯è½å¨å
§é¨æ«å â¸ï¼åªè¦éå° `await`ã
+
+éç¨®ä½¿ç¨ `async` å `await` çé忥ç¨å¼ç¢¼åè½éå¸¸è¢«æ¦æ¬çºãåç¨ããéè Go èªè¨ç主è¦ç¹æ§ãGoroutinesãç¸ä¼¼ã
+
+## çµè«
+
+è®æå忬¡åé¡§ä¹åçå¥åï¼
+
+> ç¾ä»£çæ¬ç Python æ¯æä½¿ç¨ **"åç¨"** ç **`async` å `await`** èªæ³ä¾å¯« **"é忥ç¨å¼ç¢¼"**ã
+
+ç¾å¨æè©²è½æç½å
¶å«æäºãâ¨
+
+éäºå°±æ¯é©
å FastAPIï¼éé Starletteï¼éä½çåçï¼ä¹è®å®ææå¦æ¤é©äººçæè½ã
+
+## é常æè¡æ§çç´°ç¯
+
+/// warning
+
+ä½ å¤§æ¦å¯ä»¥è·³ééæ®µã
+
+éè£¡æ¯æé FastAPI å
§é¨æè¡ç´°ç¯ã
+
+å¦æä½ æç¸ç¶å¤çæè¡èæ¯ï¼ä¾å¦åç¨ãå·è¡ç·ãé»å¡çï¼ï¼ä¸¦ä¸å° FastAPI å¦ä½èç `async def` èå¸¸è¦ `def` æå°å¥½å¥ï¼è«ç¹¼çºé±è®ã
+
+///
+
+### è·¯å¾æä½å½æ°
+
+ç¶ä½ ä½¿ç¨ `def` è䏿¯ `async def` 宣å*è·¯å¾æä½å½å¼*æï¼è©²å½å¼æå¨å¤é¨çå·è¡ç·æ± ï¼threadpoolï¼ä¸å·è¡ï¼ç¶å¾çå¾
çµæï¼è䏿¯ç´æ¥å¼å«ï¼å çºé樣æé»å¡ä¼ºæå¨ï¼ã
+
+å¦æä½ ä¾èªæ¼å
¶ä»ä¸ä»¥é種æ¹å¼éä½çéåæ¥æ¡æ¶ï¼èä¸ä½ ç¿æ
£æ¼ä½¿ç¨æ®éç `def` å®ç¾©å
é²è¡ç°¡å®è¨ç®ç*è·¯å¾æä½å½å¼*ï¼ç®çæ¯ç²å¾å¾®å°çæ§è½å¢çï¼å¤§ç´ 100 å¥ç§ï¼ï¼è«æ³¨æï¼å¨ FastAPI ä¸ï¼æææå®å
¨ç¸åãå¨éäºæ
æ³ä¸ï¼æå¥½ä½¿ç¨ `async def`é¤éä½ ç*è·¯å¾æä½å½å¼*å·è¡é»å¡ç I/O çç¨å¼ç¢¼ã
+
+ä¸éï¼å¨éå
©ç¨®æ
æ³ä¸ï¼**FastAPI** [ä»ç¶å¾å¿«](index.md#_11){.internal-link target=_blank}è³å°èä½ ä¹åçæ¡æ¶ç¸ç¶ï¼æè
æ´å¿«ï¼ã
+
+### ä¾è³´é
(Dependencies)
+
+忍£é©ç¨æ¼[ä¾è³´é
](tutorial/dependencies/index.md){.internal-link target=_blank}ã妿ä¾è³´é
æ¯ä¸åæ¨æºç `def` å½å¼ï¼è䏿¯ `async def`ï¼é£éº¼å®å¨å¤é¨çå·è¡ç·æ± 被éè¡ã
+
+### åä¾è³´é
+
+ä½ å¯ä»¥ææå¤åç¸äºä¾è³´çä¾è³´é
å[åä¾è³´é
](tutorial/dependencies/sub-dependencies.md){.internal-link target=_blank} ï¼ä½çºå½å¼å®ç¾©ç忏ï¼ï¼å
¶ä¸ä¸äºå¯è½æ¯ç¨ `async def` 宣åï¼ä¹å¯è½æ¯ç¨ `def` 宣åãå®åä»ç¶å¯ä»¥æ£å¸¸éä½ï¼ç¨ `def` å®ç¾©çé£äºå°æå¨å¤é¨çå·è¡ç·ä¸å¼å«ï¼ä¾èªå·è¡ç·æ± ï¼ï¼è䏿¯è¢«ãçå¾
ãã
+
+### å
¶ä»è¼å©å½å¼
+
+ä½ å¯ä»¥ç´æ¥å¼å«ä»»ä½ä½¿ç¨ `def` æ `async def` 建ç«çå
¶ä»è¼å©å½å¼ï¼FastAPI 䏿影é¿ä½ å¼å«å®åçæ¹å¼ã
+
+éè FastAPI çºä½ å¼å«*è·¯å¾æä½å½å¼*åä¾è³´é
çé輯ææä¸åã
+
+å¦æä½ çè¼å©å½å¼æ¯ç¨ `def` 宣åçï¼å®å°æè¢«ç´æ¥å¼å«ï¼æç
§ä½ å¨ç¨å¼ç¢¼ä¸æ°å¯«çæ¹å¼ï¼ï¼è䏿¯å¨å·è¡ç·æ± ä¸ãå¦æè©²å½å¼æ¯ç¨ `async def` 宣åï¼é£éº¼ä½ å¨å¼å«ææè©²ä½¿ç¨ `await` çå¾
å
¶çµæã
+
+---
+
+å䏿¬¡å¼·èª¿ï¼éäºé½æ¯é常æè¡æ§çç´°ç¯ï¼å¦æä½ ç¹å°å¨å°æ¾éäºè³è¨ï¼éäºå
§å®¹å¯è½æå°ä½ æå¹«å©ã
+
+å¦åï¼åªééµå¾ªä¸é¢æå°çæå¼å³å¯ï¼è¶æéå?.