1- # SOME DESCRIPTIVE TITLE.
21# Copyright (C) 2001-2022, Python Software Foundation
32# This file is distributed under the same license as the Python package.
43#
54# Translators:
5+ # Adrian Liaw <adrianliaw2000@gmail.com>, 2018
6+ # Matt Wang <mattwang44gmail.com>, 2022
67msgid ""
78msgstr ""
89"Project-Id-Version :Python 3.10\n "
910"Report-Msgid-Bugs-To :\n "
1011"POT-Creation-Date :2021-09-13 00:11+0000\n "
11- "PO-Revision-Date :2018-05-23 14:38+0000 \n "
12- "Last-Translator :Adrian Liaw <adrianliaw2000@gmail .com>\n "
12+ "PO-Revision-Date :2022-06-11 15:29+0800 \n "
13+ "Last-Translator :Matt Wang <mattwang44gmail .com>\n "
1314"Language-Team :Chinese - TAIWAN (https://github.com/python/python-docs-zh- "
1415"tw)\n "
1516"Language :zh_TW\n "
1617"MIME-Version :1.0\n "
1718"Content-Type :text/plain; charset=UTF-8\n "
1819"Content-Transfer-Encoding :8bit\n "
1920"Plural-Forms :nplurals=1; plural=0;\n "
21+ "X-Generator :Poedit 3.1\n "
2022
2123#: ../../library/asyncio-dev.rst:7
2224msgid "Developing with asyncio"
23- msgstr ""
25+ msgstr "使用 asyncio 開發 "
2426
2527#: ../../library/asyncio-dev.rst:9
2628msgid ""
2729"Asynchronous programming is different from classic\" sequential\" "
2830"programming."
2931msgstr ""
32+ "非同步程式設計 (asynchronous programming) 與傳統的\" 順序\" 程式設計 "
33+ "(sequential programming) 不同。"
3034
3135#: ../../library/asyncio-dev.rst:12
3236msgid ""
3337"This page lists common mistakes and traps and explains how to avoid them."
34- msgstr ""
38+ msgstr "本頁列出常見的錯誤和陷阱,並解釋如何避免它們。 "
3539
3640#: ../../library/asyncio-dev.rst:19
3741msgid "Debug Mode"
38- msgstr ""
42+ msgstr "除錯模式 "
3943
4044#: ../../library/asyncio-dev.rst:21
4145msgid ""
4246"By default asyncio runs in production mode. In order to ease the "
4347"development asyncio has a *debug mode*."
4448msgstr ""
49+ "在預設情況下 asyncio 以正式生產模式 (production mode) 執行。為了讓開發更輕"
50+ "鬆,asyncio 還有一種\\ *除錯模式 (debug mode)*\\ 。"
4551
4652#: ../../library/asyncio-dev.rst:24
4753msgid "There are several ways to enable asyncio debug mode:"
48- msgstr ""
54+ msgstr "有幾種方法可以啟用 asyncio 除錯模式: "
4955
5056#: ../../library/asyncio-dev.rst:26
5157msgid "Setting the :envvar:`PYTHONASYNCIODEBUG` environment variable to ``1``."
52- msgstr ""
58+ msgstr "將 :envvar:`PYTHONASYNCIODEBUG` 環境變數設定為 ``1``。 "
5359
5460#: ../../library/asyncio-dev.rst:28
5561msgid "Using the :ref:`Python Development Mode <devmode>`."
56- msgstr ""
62+ msgstr "使用 :ref:`Python 開發模式 (Development Mode) <devmode>`。 "
5763
5864#: ../../library/asyncio-dev.rst:30
5965msgid "Passing ``debug=True`` to :func:`asyncio.run`."
60- msgstr ""
66+ msgstr "將 ``debug=True`` 傳遞給 :func:`asyncio.run`。 "
6167
6268#: ../../library/asyncio-dev.rst:32
6369msgid "Calling :meth:`loop.set_debug`."
64- msgstr ""
70+ msgstr "呼叫 :meth:`loop.set_debug`。 "
6571
6672#: ../../library/asyncio-dev.rst:34
6773msgid "In addition to enabling the debug mode, consider also:"
68- msgstr ""
74+ msgstr "除了啟用除錯模式外,還要考慮: "
6975
7076#: ../../library/asyncio-dev.rst:36
7177msgid ""
7278"setting the log level of the :ref:`asyncio logger <asyncio-logger>` to :py:"
7379"data:`logging.DEBUG`, for example the following snippet of code can be run "
7480"at startup of the application::"
7581msgstr ""
82+ "將 :ref:`asyncio logger(日誌記錄器) <asyncio-logger>`\\ 的日誌級别設置為 :"
83+ "py:data:`logging.DEBUG`,例如下面的程式片段可以在應用程式啟動時運行:\n"
84+ "\n"
85+ "::"
7686
7787#: ../../library/asyncio-dev.rst:42
7888msgid ""
7989"configuring the :mod:`warnings` module to display :exc:`ResourceWarning` "
8090"warnings. One way of doing that is by using the :option:`-W` ``default`` "
8191"command line option."
8292msgstr ""
93+ "配置 :mod:`warnings` 模組以顯示 :exc:`ResourceWarning` 警告。一種方法是使用 :"
94+ "option:`-W` ``default`` 命令列選項。"
8395
8496#: ../../library/asyncio-dev.rst:47
8597msgid "When the debug mode is enabled:"
86- msgstr ""
98+ msgstr "啟用除錯模式時: "
8799
88100#: ../../library/asyncio-dev.rst:49
89101msgid ""
90102"asyncio checks for :ref:`coroutines that were not awaited <asyncio-coroutine-"
91103"not-scheduled>` and logs them; this mitigates the\" forgotten await\" "
92104"pitfall."
93105msgstr ""
106+ "asyncio 會檢查\\ :ref:`未被等待的協程 <asyncio-coroutine-not-scheduled>`\\ 並"
107+ "記錄他們;這會減輕\" 被遺忘的等待 (forgotten await)\" 問題。"
94108
95109#: ../../library/asyncio-dev.rst:53
96110msgid ""
97111"Many non-threadsafe asyncio APIs (such as :meth:`loop.call_soon` and :meth:"
98112"`loop.call_at` methods) raise an exception if they are called from a wrong "
99113"thread."
100114msgstr ""
115+ "許多非執行緒安全 (non-threadsafe) 的 asyncio APIs(例如 :meth:`loop."
116+ "call_soon` 和 :meth:`loop.call_at` 方法),如果從錯誤的執行緒呼叫就會引發例"
117+ "外。"
101118
102119#: ../../library/asyncio-dev.rst:57
103120msgid ""
104121"The execution time of the I/O selector is logged if it takes too long to "
105122"perform an I/O operation."
106123msgstr ""
124+ "如果執行一個 I/O 操作花費的時間太長,則將 I/O 選擇器 (selector) 的執行時間記"
125+ "錄到日誌中。"
107126
108127#: ../../library/asyncio-dev.rst:60
109128msgid ""
110129"Callbacks taking longer than 100ms are logged. The :attr:`loop."
111130"slow_callback_duration` attribute can be used to set the minimum execution "
112131"duration in seconds that is considered\" slow\" ."
113132msgstr ""
133+ "執行時間超過 100 毫秒的回呼 (callback) 將會被記錄於日誌。屬性 :attr:`loop."
134+ "slow_callback_duration` 可用於設定以秒為單位的最小執行持續時間,超過這個值執"
135+ "行時間就會被視為\" 緩慢\" 。"
114136
115137#: ../../library/asyncio-dev.rst:68
116138msgid "Concurrency and Multithreading"
117- msgstr ""
139+ msgstr "並行性和多執行緒 (Concurrency and Multithreading) "
118140
119141#: ../../library/asyncio-dev.rst:70
120142msgid ""
@@ -124,12 +146,20 @@ msgid ""
124146"``await`` expression, the running Task gets suspended, and the event loop "
125147"executes the next Task."
126148msgstr ""
149+ "事件迴圈在執行緒中運行(通常是主執行緒),並在其執行緒中執行所有回呼和 "
150+ "Tasks(任務)。當一個 Task 在事件迴圈中運行時,沒有其他 Task 可以在同一個執行"
151+ "緒中運行。當一個 Task 執行一個 ``await`` 運算式時,正在執行的 Task 會被暫停,"
152+ "而事件迴圈會執行下一個 Task。"
127153
128154#: ../../library/asyncio-dev.rst:76
129155msgid ""
130156"To schedule a :term:`callback` from another OS thread, the :meth:`loop."
131157"call_soon_threadsafe` method should be used. Example::"
132158msgstr ""
159+ "要從不同的 OS 執行緒為一個 :term:`callback` 排程,應該使用 :meth:`loop."
160+ "call_soon_threadsafe` 方法。例如:\n"
161+ "\n"
162+ "::"
133163
134164#: ../../library/asyncio-dev.rst:81
135165msgid ""
@@ -138,19 +168,29 @@ msgid ""
138168"a callback. If there's a need for such code to call a low-level asyncio "
139169"API, the :meth:`loop.call_soon_threadsafe` method should be used, e.g.::"
140170msgstr ""
171+ "幾乎所有 asyncio 物件都不支援執行緒安全 (thread safe),這通常不是問題,除非"
172+ "在 Task 或回呼函式之外有程式需要和它們一起運作。如果需要這樣的程式來呼叫低階 "
173+ "asyncio API,應該使用 :meth:`loop.call_soon_threadsafe` 方法,例如:\n"
174+ "\n"
175+ "::"
141176
142177#: ../../library/asyncio-dev.rst:89
143178msgid ""
144179"To schedule a coroutine object from a different OS thread, the :func:"
145180"`run_coroutine_threadsafe` function should be used. It returns a :class:"
146181"`concurrent.futures.Future` to access the result::"
147182msgstr ""
183+ "要從不同的 OS 執行緒為一個協程物件排程,應該使用 :func:"
184+ "`run_coroutine_threadsafe` 函式。它會回傳一個 :class:`concurrent.futures."
185+ "Future` 以存取結果:\n"
186+ "\n"
187+ "::"
148188
149189#: ../../library/asyncio-dev.rst:102
150190msgid ""
151191"To handle signals and to execute subprocesses, the event loop must be run in "
152192"the main thread."
153- msgstr ""
193+ msgstr "為了能夠處理訊號和執行子行程,事件迴圈必須於主執行緒中運行。 "
154194
155195#: ../../library/asyncio-dev.rst:105
156196msgid ""
@@ -159,6 +199,9 @@ msgid ""
159199"different OS thread without blocking the OS thread that the event loop runs "
160200"in."
161201msgstr ""
202+ ":meth:`loop.run_in_executor` 方法可以和 :class:`concurrent.futures."
203+ "ThreadPoolExecutor` 一起使用,這能夠在作業系統上另一個不同的執行緒中執行阻塞"
204+ "程式,且避免阻塞執行事件迴圈的執行緒。"
162205
163206#: ../../library/asyncio-dev.rst:110
164207msgid ""
@@ -172,51 +215,73 @@ msgid ""
172215"a :class:`concurrent.futures.ProcessPoolExecutor` to execute code in a "
173216"different process."
174217msgstr ""
218+ "目前沒有什麼辦法能直接從另一個行程(例如透過 :mod:`multiprocessing` 啟動的程"
219+ "序)來為協程或回呼排程。\\ :ref:`事件迴圈方法 <asyncio-event-loop>`\\ 小節列"
220+ "出了可以從 pipes(管道)讀取並監視 file descriptor(檔案描述器)而不會阻塞事"
221+ "件迴圈的 API。此外,asyncio 的\\ :ref:`子行程 <asyncio-subprocess>` API 提供"
222+ "了一種啟動行程並從事件迴圈與其通訊的辦法。最後,之前提到的 :meth:`loop."
223+ "run_in_executor` 方法也可和 :class:`concurrent.futures.ProcessPoolExecutor` "
224+ "搭配使用,以在另一個行程中執行程式。"
175225
176226#: ../../library/asyncio-dev.rst:124
177227msgid "Running Blocking Code"
178- msgstr ""
228+ msgstr "執行阻塞的程式 "
179229
180230#: ../../library/asyncio-dev.rst:126
181231msgid ""
182232"Blocking (CPU-bound) code should not be called directly. For example, if a "
183233"function performs a CPU-intensive calculation for 1 second, all concurrent "
184234"asyncio Tasks and IO operations would be delayed by 1 second."
185235msgstr ""
236+ "不應該直接呼叫阻塞(CPU 密集型)程式。例如一個執行 1 秒 CPU 密集型計算的函"
237+ "式,那麼所有並行非同步 Tasks 和 IO 操作都會被延遲 1 秒。"
186238
187239#: ../../library/asyncio-dev.rst:131
188240msgid ""
189241"An executor can be used to run a task in a different thread or even in a "
190242"different process to avoid blocking the OS thread with the event loop. See "
191243"the :meth:`loop.run_in_executor` method for more details."
192244msgstr ""
245+ "一個 executor(執行器)可以被用來在不同的執行緒、或甚至不同的行程中執行任務,"
246+ "以避免使用事件迴圈阻塞 OS 執行緒。詳情請見 :meth:`loop.run_in_executor` 方"
247+ "法。"
193248
194249#: ../../library/asyncio-dev.rst:140
195250msgid "Logging"
196- msgstr ""
251+ msgstr "日誌記錄 "
197252
198253#: ../../library/asyncio-dev.rst:142
199254msgid ""
200255"asyncio uses the :mod:`logging` module and all logging is performed via the "
201256"``\" asyncio\" `` logger."
202257msgstr ""
258+ "asyncio 使用 :mod:`logging` 模組,所有日誌記錄都是透過 ``\" asyncio\" `` "
259+ "logger 執行的。"
203260
204261#: ../../library/asyncio-dev.rst:145
205262msgid ""
206263"The default log level is :py:data:`logging.INFO`, which can be easily "
207264"adjusted::"
208265msgstr ""
266+ "日誌級別被預設為 :py:data:`logging.INFO`,它可以很容易地被調整:\n"
267+ "\n"
268+ "::"
209269
210270#: ../../library/asyncio-dev.rst:154
211271msgid "Detect never-awaited coroutines"
212- msgstr ""
272+ msgstr "偵測從未被等待的 (never-awaited) 協程 "
213273
214274#: ../../library/asyncio-dev.rst:156
215275msgid ""
216276"When a coroutine function is called, but not awaited (e.g. ``coro()`` "
217277"instead of ``await coro()``) or the coroutine is not scheduled with :meth:"
218278"`asyncio.create_task`, asyncio will emit a :exc:`RuntimeWarning`::"
219279msgstr ""
280+ "當協程函式被呼叫而不是被等待時(即執行 ``coro()`` 而不是 ``await coro()``)或"
281+ "者協程沒有透過 :meth:`asyncio.create_task` 被排程,asyncio 將會發出 :exc:"
282+ "`RuntimeWarning`:\n"
283+ "\n"
284+ "::"
220285
221286#: ../../library/asyncio-dev.rst:171 ../../library/asyncio-dev.rst:216
222287msgid "Output::"
@@ -228,16 +293,22 @@ msgstr ""
228293#: ../../library/asyncio-dev.rst:176 ../../library/asyncio-dev.rst:232
229294msgid "Output in debug mode::"
230295msgstr ""
296+ "除錯模式中的輸出:\n"
297+ "\n"
298+ "::"
231299
232300#: ../../library/asyncio-dev.rst:189
233301msgid ""
234302"The usual fix is to either await the coroutine or call the :meth:`asyncio."
235303"create_task` function::"
236304msgstr ""
305+ "常用的修復方法是去等待協程或者呼叫 :meth:`asyncio.create_task` 函式:\n"
306+ "\n"
307+ "::"
237308
238309#: ../../library/asyncio-dev.rst:197
239310msgid "Detect never-retrieved exceptions"
240- msgstr ""
311+ msgstr "偵測從未被獲取的 (never-retrieved) 例外 "
241312
242313#: ../../library/asyncio-dev.rst:199
243314msgid ""
@@ -246,13 +317,23 @@ msgid ""
246317"this case, asyncio would emit a log message when the Future object is "
247318"garbage collected."
248319msgstr ""
320+ "如果呼叫 :meth:`Future.set_exception`,但 Future 物件從未被等待,例外將無法被"
321+ "傳播 (propagate) 到使用者程式。在這種情況下,當 Future 物件被垃圾回收 "
322+ "(garbage collected) 時,asyncio 將發出一則日誌訊息。"
249323
250324#: ../../library/asyncio-dev.rst:204
251325msgid "Example of an unhandled exception::"
252326msgstr ""
327+ "未處理例外的例子:\n"
328+ "\n"
329+ "::"
253330
254331#: ../../library/asyncio-dev.rst:227
255332msgid ""
256333":ref:`Enable the debug mode <asyncio-debug-mode>` to get the traceback where "
257334"the task was created::"
258335msgstr ""
336+ ":ref:`啟用除錯模式 <asyncio-debug-mode>`\\ 以取得任務建立處的追蹤資訊 "
337+ "(traceback):\n"
338+ "\n"
339+ "::"