-
-
Notifications
You must be signed in to change notification settings - Fork 80
/
Copy pathasyncio-dev.po
297 lines (256 loc) · 12.7 KB
/
asyncio-dev.po
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
# SOME DESCRIPTIVE TITLE.
# Copyright (C) 2001-2022, Python Software Foundation
# This file is distributed under the same license as the Python package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
# Translators:
# ww song <sww4718168@gmail.com>, 2018
# Pan Felix <tinylambda@gmail.com>, 2019
# kevin wong <huagang517@126.com>, 2019
# cdarlint <cdarling@126.com>, 2019
# 钢 彭 <szhairui@gmail.com>, 2019
# Freesand Leo <yuqinju@163.com>, 2020
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: Python 3.9\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-11-04 14:34+0000\n"
"PO-Revision-Date: 2017-02-16 17:48+0000\n"
"Last-Translator: Freesand Leo <yuqinju@163.com>, 2020\n"
"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: zh_CN\n"
"Plural-Forms: nplurals=1; plural=0;\n"
#: ../../library/asyncio-dev.rst:7
msgid "Developing with asyncio"
msgstr "用 asyncio 开发"
#: ../../library/asyncio-dev.rst:9
msgid ""
"Asynchronous programming is different from classic \"sequential\" "
"programming."
msgstr "异步编程与传统的“顺序”编程不同。"
#: ../../library/asyncio-dev.rst:12
msgid ""
"This page lists common mistakes and traps and explains how to avoid them."
msgstr "本页列出常见的错误和陷阱,并解释如何避免它们。"
#: ../../library/asyncio-dev.rst:19
msgid "Debug Mode"
msgstr "Debug 模式"
#: ../../library/asyncio-dev.rst:21
msgid ""
"By default asyncio runs in production mode. In order to ease the "
"development asyncio has a *debug mode*."
msgstr "默认情况下,asyncio以生产模式运行。为了简化开发,asyncio还有一种*debug 模式* 。"
#: ../../library/asyncio-dev.rst:24
msgid "There are several ways to enable asyncio debug mode:"
msgstr "有几种方法可以启用异步调试模式:"
#: ../../library/asyncio-dev.rst:26
msgid ""
"Setting the :envvar:`PYTHONASYNCIODEBUG` environment variable to ``1``."
msgstr "将 :envvar:`PYTHONASYNCIODEBUG` 环境变量设置为 ``1`` 。"
#: ../../library/asyncio-dev.rst:28
msgid "Using the :ref:`Python Development Mode <devmode>`."
msgstr "使用 :ref:`Python 开发模式 <devmode>`。"
#: ../../library/asyncio-dev.rst:30
msgid "Passing ``debug=True`` to :func:`asyncio.run`."
msgstr "将 ``debug=True`` 传递给 :func:`asyncio.run` 。"
#: ../../library/asyncio-dev.rst:32
msgid "Calling :meth:`loop.set_debug`."
msgstr "调用 :meth:`loop.set_debug` 。"
#: ../../library/asyncio-dev.rst:34
msgid "In addition to enabling the debug mode, consider also:"
msgstr "除了启用调试模式外,还要考虑:"
#: ../../library/asyncio-dev.rst:36
msgid ""
"setting the log level of the :ref:`asyncio logger <asyncio-logger>` to "
":py:data:`logging.DEBUG`, for example the following snippet of code can be "
"run at startup of the application::"
msgstr ""
"将 :ref:`asyncio logger <asyncio-logger>` 的日志级别设置为 "
":py:data:`logging.DEBUG`,例如,下面的代码片段可以在应用程序启动时运行::"
#: ../../library/asyncio-dev.rst:42
msgid ""
"configuring the :mod:`warnings` module to display :exc:`ResourceWarning` "
"warnings. One way of doing that is by using the :option:`-W` ``default`` "
"command line option."
msgstr ""
"配置 :mod:`warnings` 模块以显示 :exc:`ResourceWarning` 警告。一种方法是使用 :option:`-W` "
"``default`` 命令行选项。"
#: ../../library/asyncio-dev.rst:47
msgid "When the debug mode is enabled:"
msgstr "启用调试模式时:"
#: ../../library/asyncio-dev.rst:49
msgid ""
"asyncio checks for :ref:`coroutines that were not awaited <asyncio-"
"coroutine-not-scheduled>` and logs them; this mitigates the \"forgotten "
"await\" pitfall."
msgstr ""
"asyncio 检查 :ref:`未被等待的协程 <asyncio-coroutine-not-scheduled>` "
"并记录他们;这将消除“被遗忘的等待”问题。"
#: ../../library/asyncio-dev.rst:53
msgid ""
"Many non-threadsafe asyncio APIs (such as :meth:`loop.call_soon` and "
":meth:`loop.call_at` methods) raise an exception if they are called from a "
"wrong thread."
msgstr ""
"许多非线程安全的异步 APIs (例如 :meth:`loop.call_soon` 和 :meth:`loop.call_at` "
"方法),如果从错误的线程调用,则会引发异常。"
#: ../../library/asyncio-dev.rst:57
msgid ""
"The execution time of the I/O selector is logged if it takes too long to "
"perform an I/O operation."
msgstr "如果执行I/O操作花费的时间太长,则记录I/O选择器的执行时间。"
#: ../../library/asyncio-dev.rst:60
msgid ""
"Callbacks taking longer than 100ms are logged. The "
":attr:`loop.slow_callback_duration` attribute can be used to set the minimum"
" execution duration in seconds that is considered \"slow\"."
msgstr ""
"执行时间超过100毫秒的回调将会载入日志。 属性 :attr:`loop.slow_callback_duration` "
"可用于设置以秒为单位的最小执行持续时间,这被视为“缓慢”。"
#: ../../library/asyncio-dev.rst:68
msgid "Concurrency and Multithreading"
msgstr "并发性和多线程"
#: ../../library/asyncio-dev.rst:70
msgid ""
"An event loop runs in a thread (typically the main thread) and executes all "
"callbacks and Tasks in its thread. While a Task is running in the event "
"loop, no other Tasks can run in the same thread. When a Task executes an "
"``await`` expression, the running Task gets suspended, and the event loop "
"executes the next Task."
msgstr ""
"事件循环在线程中运行(通常是主线程),并在其线程中执行所有回调和任务。当一个任务在事件循环中运行时,没有其他任务可以在同一个线程中运行。当一个任务执行一个"
" ``await`` 表达式时,正在运行的任务被挂起,事件循环执行下一个任务。"
#: ../../library/asyncio-dev.rst:76
msgid ""
"To schedule a :term:`callback` from another OS thread, the "
":meth:`loop.call_soon_threadsafe` method should be used. Example::"
msgstr ""
"要调度来自另一 OS 线程的 :term:`callback`,应该使用 :meth:`loop.call_soon_threadsafe` 方法。 "
"例如::"
#: ../../library/asyncio-dev.rst:81
msgid ""
"Almost all asyncio objects are not thread safe, which is typically not a "
"problem unless there is code that works with them from outside of a Task or "
"a callback. If there's a need for such code to call a low-level asyncio "
"API, the :meth:`loop.call_soon_threadsafe` method should be used, e.g.::"
msgstr ""
"几乎所有异步对象都不是线程安全的,这通常不是问题,除非在任务或回调函数之外有代码可以使用它们。如果需要这样的代码来调用低级异步API,应该使用 "
":meth:`loop.call_soon_threadsafe` 方法,例如::"
#: ../../library/asyncio-dev.rst:89
msgid ""
"To schedule a coroutine object from a different OS thread, the "
":func:`run_coroutine_threadsafe` function should be used. It returns a "
":class:`concurrent.futures.Future` to access the result::"
msgstr ""
"要从不同的OS线程调度一个协程对象,应该使用 :func:`run_coroutine_threadsafe` 函数。它返回一个 "
":class:`concurrent.futures.Future` 。查询结果::"
#: ../../library/asyncio-dev.rst:102
msgid ""
"To handle signals and to execute subprocesses, the event loop must be run in"
" the main thread."
msgstr "为了能够处理信号和执行子进程,事件循环必须运行于主线程中。"
#: ../../library/asyncio-dev.rst:105
msgid ""
"The :meth:`loop.run_in_executor` method can be used with a "
":class:`concurrent.futures.ThreadPoolExecutor` to execute blocking code in a"
" different OS thread without blocking the OS thread that the event loop runs"
" in."
msgstr ""
"方法 :meth:`loop.run_in_executor` 可以和 "
":class:`concurrent.futures.ThreadPoolExecutor` "
"一起使用,用于在一个不同的操作系统线程中执行阻塞代码,并避免阻塞运行事件循环的那个操作系统线程。"
#: ../../library/asyncio-dev.rst:110
msgid ""
"There is currently no way to schedule coroutines or callbacks directly from "
"a different process (such as one started with :mod:`multiprocessing`). The "
":ref:`Event Loop Methods <asyncio-event-loop>` section lists APIs that can "
"read from pipes and watch file descriptors without blocking the event loop. "
"In addition, asyncio's :ref:`Subprocess <asyncio-subprocess>` APIs provide a"
" way to start a process and communicate with it from the event loop. Lastly,"
" the aforementioned :meth:`loop.run_in_executor` method can also be used "
"with a :class:`concurrent.futures.ProcessPoolExecutor` to execute code in a "
"different process."
msgstr ""
"目前没有什么办法能直接从另一个进程 (例如通过 :mod:`multiprocessing` 启动的进程) 安排协程或回调。 :ref:`事件循环方法 "
"<asyncio-event-loop>` 小节列出了可以从管道读取并监视文件描述符而不会阻塞事件循环的 API。 此外,asyncio 的 "
":ref:`子进程 <asyncio-subprocess>` API 提供了一种启动进程并从事件循环与其通信的办法。 最后,之前提到的 "
":meth:`loop.run_in_executor` 方法也可配合 "
":class:`concurrent.futures.ProcessPoolExecutor` 使用以在另一个进程中执行代码。"
#: ../../library/asyncio-dev.rst:124
msgid "Running Blocking Code"
msgstr "运行阻塞的代码"
#: ../../library/asyncio-dev.rst:126
msgid ""
"Blocking (CPU-bound) code should not be called directly. For example, if a "
"function performs a CPU-intensive calculation for 1 second, all concurrent "
"asyncio Tasks and IO operations would be delayed by 1 second."
msgstr ""
"不应该直接调用阻塞( CPU 绑定)代码。例如,如果一个函数执行1秒的 CPU 密集型计算,那么所有并发异步任务和 IO 操作都将延迟1秒。"
#: ../../library/asyncio-dev.rst:131
msgid ""
"An executor can be used to run a task in a different thread or even in a "
"different process to avoid blocking the OS thread with the event loop. See "
"the :meth:`loop.run_in_executor` method for more details."
msgstr ""
"可以用执行器在不同的线程甚至不同的进程中运行任务,以避免使用事件循环阻塞 OS 线程。 请参阅 :meth:`loop.run_in_executor`"
" 方法了解详情。"
#: ../../library/asyncio-dev.rst:140
msgid "Logging"
msgstr "日志"
#: ../../library/asyncio-dev.rst:142
msgid ""
"asyncio uses the :mod:`logging` module and all logging is performed via the "
"``\"asyncio\"`` logger."
msgstr "asyncio使用 :mod:`logging` 模块,所有日志记录都是通过 ``\"asyncio\"`` logger执行的。"
#: ../../library/asyncio-dev.rst:145
msgid ""
"The default log level is :py:data:`logging.INFO`, which can be easily "
"adjusted::"
msgstr "默认日志级别是 :py:data:`logging.INFO` 。可以很容易地调整::"
#: ../../library/asyncio-dev.rst:154
msgid "Detect never-awaited coroutines"
msgstr "检测 never-awaited 协同程序"
#: ../../library/asyncio-dev.rst:156
msgid ""
"When a coroutine function is called, but not awaited (e.g. ``coro()`` "
"instead of ``await coro()``) or the coroutine is not scheduled with "
":meth:`asyncio.create_task`, asyncio will emit a :exc:`RuntimeWarning`::"
msgstr ""
"当协程函数被调用而不是被等待时 (即执行 ``coro()`` 而不是 ``await coro()``) 或者协程没有通过 "
":meth:`asyncio.create_task` 被排入计划日程,asyncio 将会发出一条 :exc:`RuntimeWarning`::"
#: ../../library/asyncio-dev.rst:171 ../../library/asyncio-dev.rst:216
msgid "Output::"
msgstr "输出::"
#: ../../library/asyncio-dev.rst:176 ../../library/asyncio-dev.rst:232
msgid "Output in debug mode::"
msgstr "调试模式的输出::"
#: ../../library/asyncio-dev.rst:189
msgid ""
"The usual fix is to either await the coroutine or call the "
":meth:`asyncio.create_task` function::"
msgstr "通常的修复方法是等待协程或者调用 :meth:`asyncio.create_task` 函数::"
#: ../../library/asyncio-dev.rst:197
msgid "Detect never-retrieved exceptions"
msgstr "检测就再也没异常"
#: ../../library/asyncio-dev.rst:199
msgid ""
"If a :meth:`Future.set_exception` is called but the Future object is never "
"awaited on, the exception would never be propagated to the user code. In "
"this case, asyncio would emit a log message when the Future object is "
"garbage collected."
msgstr ""
"如果调用 :meth:`Future.set_exception` ,但不等待 Future 对象,将异常传播到用户代码。在这种情况下,当 Future"
" 对象被垃圾收集时,asyncio将发出一条日志消息。"
#: ../../library/asyncio-dev.rst:204
msgid "Example of an unhandled exception::"
msgstr "未处理异常的例子::"
#: ../../library/asyncio-dev.rst:227
msgid ""
":ref:`Enable the debug mode <asyncio-debug-mode>` to get the traceback where"
" the task was created::"
msgstr ":ref:`激活调试模式 <asyncio-debug-mode>` 以获取任务创建处的跟踪信息::"