-
-
Notifications
You must be signed in to change notification settings - Fork 53
Expand file tree
/
Copy pathasyncio-dev.po
More file actions
475 lines (419 loc) · 18.4 KB
/
asyncio-dev.po
File metadata and controls
475 lines (419 loc) · 18.4 KB
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
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
# SOME DESCRIPTIVE TITLE.
# Copyright (C) 2001-2017, Python Software Foundation
# This file is distributed under the same license as the Python package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2017.
#
msgid ""
msgstr ""
"Project-Id-Version: Python 3.6\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-04-17 23:44+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: Dong-gweon Oh <flowdas@gmail.com>\n"
"Language-Team: Korean (https://python.flowdas.com)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.17.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 "디버그 모드"
#: ../../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에는 *디버그 모드*\\를 제공합니다."
#: ../../library/asyncio-dev.rst:24
msgid "There are several ways to enable asyncio debug mode:"
msgstr "여러 가지 방법으로 asyncio 디버그 모드를 활성화할 수 있습니다:"
#: ../../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:`파이썬 개발 모드 <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:const:`logging.DEBUG`, for example the following snippet of code can "
"be run at startup of the application::"
msgstr ""
":ref:`asyncio 로거 <asyncio-logger>`\\의 로그 수준을 :py:const:`logging.DEBUG`\\로"
" 설정, 예를 들어 응용 프로그램 시작 시 다음 코드 조각을 실행할 수 있습니다::"
#: ../../library/asyncio-dev.rst:40
msgid "logging.basicConfig(level=logging.DEBUG)"
msgstr "logging.basicConfig(level=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 ""
":exc:`ResourceWarning` 경고를 표시하도록 :mod:`warnings` 모듈을 구성. 이렇게 하는 한 가지 방법은 "
":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>`\\을 검사하고 로그 "
"합니다; 이것은 \"잊힌 await\" 함정을 완화합니다."
#: ../../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 ""
"많은 스레드 안전하지 않은 asyncio API(: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 100 milliseconds 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:79
msgid "loop.call_soon_threadsafe(callback, *args)"
msgstr "loop.call_soon_threadsafe(callback, *args)"
#: ../../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 ""
"거의 모든 asyncio 객체는 스레드 안전하지 않습니다. 태스크나 콜백 외부에서 작동하는 코드가 없으면 일반적으로 문제가 되지 "
"않습니다. 그러한 코드가 저수준 asyncio API를 호출해야 하면, :meth:`loop.call_soon_threadsafe`"
" 메서드를 사용해야 합니다, 예를 들어::"
#: ../../library/asyncio-dev.rst:87
msgid "loop.call_soon_threadsafe(fut.cancel)"
msgstr "loop.call_soon_threadsafe(fut.cancel)"
#: ../../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:93
msgid ""
"async def coro_func():\n"
" return await asyncio.sleep(1, 42)\n"
"\n"
"# Later in another OS thread:\n"
"\n"
"future = asyncio.run_coroutine_threadsafe(coro_func(), loop)\n"
"# Wait for the result:\n"
"result = future.result()"
msgstr ""
"async def coro_func():\n"
" return await asyncio.sleep(1, 42)\n"
"\n"
"# 나중에 다른 OS 스레드에서:\n"
"\n"
"future = asyncio.run_coroutine_threadsafe(coro_func(), loop)\n"
"# 결과를 기다립니다:\n"
"result = future.result()"
#: ../../library/asyncio-dev.rst:102
msgid "To handle signals 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`\\와 함께 사용되어, 이벤트 루프가 실행되는 "
"OS 스레드를 블록하지 않고 다른 OS 스레드에서 블로킹 코드를 실행할 수 있습니다."
#: ../../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:`asyncio-event-loop-methods` 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-methods` 섹션은 이벤트 루프를 블록하지 않고 파이프를 읽고 파일 "
"기술자를 감시할 수 있는 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 병목) 코드는 직접 호출하면 안 됩니다. 예를 들어, 함수가 CPU 집약적인 계산을 1초 동안 수행하면, 모든 동시"
" asyncio 태스크와 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\"`` 로거를 통해 수행됩니다."
#: ../../library/asyncio-dev.rst:145
msgid ""
"The default log level is :py:const:`logging.INFO`, which can be easily "
"adjusted::"
msgstr "기본 로그 수준은 :py:const:`logging.INFO`\\며, 쉽게 조정할 수 있습니다::"
#: ../../library/asyncio-dev.rst:148
msgid "logging.getLogger(\"asyncio\").setLevel(logging.WARNING)"
msgstr "logging.getLogger(\"asyncio\").setLevel(logging.WARNING)"
#: ../../library/asyncio-dev.rst:151
msgid ""
"Network logging can block the event loop. It is recommended to use a "
"separate thread for handling logs or use non-blocking IO. For example, "
"see :ref:`blocking-handlers`."
msgstr ""
#: ../../library/asyncio-dev.rst:159
msgid "Detect never-awaited coroutines"
msgstr "await 하지 않은 코루틴 감지"
#: ../../library/asyncio-dev.rst:161
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 ""
"코루틴 함수가 호출되었지만 기다리지 않을 때(예를 들어, ``await coro()`` 대신 ``coro()``)나 코루틴이 "
":meth:`asyncio.create_task`\\로 예약되지 않으면 asyncio가 :exc:`RuntimeWarning`\\을"
" 방출합니다::"
#: ../../library/asyncio-dev.rst:166
msgid ""
"import asyncio\n"
"\n"
"async def test():\n"
" print(\"never scheduled\")\n"
"\n"
"async def main():\n"
" test()\n"
"\n"
"asyncio.run(main())"
msgstr ""
"import asyncio\n"
"\n"
"async def test():\n"
" print(\"never scheduled\")\n"
"\n"
"async def main():\n"
" test()\n"
"\n"
"asyncio.run(main())"
#: ../../library/asyncio-dev.rst:176 ../../library/asyncio-dev.rst:221
msgid "Output::"
msgstr "출력::"
#: ../../library/asyncio-dev.rst:178
msgid ""
"test.py:7: RuntimeWarning: coroutine 'test' was never awaited\n"
" test()"
msgstr ""
"test.py:7: RuntimeWarning: coroutine 'test' was never awaited\n"
" test()"
#: ../../library/asyncio-dev.rst:181 ../../library/asyncio-dev.rst:237
msgid "Output in debug mode::"
msgstr "디버그 모드에서의 출력::"
#: ../../library/asyncio-dev.rst:183
msgid ""
"test.py:7: RuntimeWarning: coroutine 'test' was never awaited\n"
"Coroutine created at (most recent call last)\n"
" File \"../t.py\", line 9, in <module>\n"
" asyncio.run(main(), debug=True)\n"
"\n"
" < .. >\n"
"\n"
" File \"../t.py\", line 7, in main\n"
" test()\n"
" test()"
msgstr ""
"test.py:7: RuntimeWarning: coroutine 'test' was never awaited\n"
"Coroutine created at (most recent call last)\n"
" File \"../t.py\", line 9, in <module>\n"
" asyncio.run(main(), debug=True)\n"
"\n"
" < .. >\n"
"\n"
" File \"../t.py\", line 7, in main\n"
" test()\n"
" test()"
#: ../../library/asyncio-dev.rst:194
msgid ""
"The usual fix is to either await the coroutine or call the "
":meth:`asyncio.create_task` function::"
msgstr "일반적인 수정법은 코루틴을 await 하거나 :meth:`asyncio.create_task` 함수를 호출하는 것입니다::"
#: ../../library/asyncio-dev.rst:197
msgid ""
"async def main():\n"
" await test()"
msgstr ""
"async def main():\n"
" await test()"
#: ../../library/asyncio-dev.rst:202
msgid "Detect never-retrieved exceptions"
msgstr "전달되지 않은 예외 감지"
#: ../../library/asyncio-dev.rst:204
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 객체가 await 되지 않으면, 예외는 절대로 "
"사용자 코드로 전파되지 않습니다. 이럴 때, Future 객체가 가비지 수집될 때 asyncio가 로그 메시지를 출력합니다."
#: ../../library/asyncio-dev.rst:209
msgid "Example of an unhandled exception::"
msgstr "처리되지 않은 예외의 예::"
#: ../../library/asyncio-dev.rst:211
msgid ""
"import asyncio\n"
"\n"
"async def bug():\n"
" raise Exception(\"not consumed\")\n"
"\n"
"async def main():\n"
" asyncio.create_task(bug())\n"
"\n"
"asyncio.run(main())"
msgstr ""
"import asyncio\n"
"\n"
"async def bug():\n"
" raise Exception(\"not consumed\")\n"
"\n"
"async def main():\n"
" asyncio.create_task(bug())\n"
"\n"
"asyncio.run(main())"
#: ../../library/asyncio-dev.rst:223
msgid ""
"Task exception was never retrieved\n"
"future: <Task finished coro=<bug() done, defined at test.py:3>\n"
" exception=Exception('not consumed')>\n"
"\n"
"Traceback (most recent call last):\n"
" File \"test.py\", line 4, in bug\n"
" raise Exception(\"not consumed\")\n"
"Exception: not consumed"
msgstr ""
"Task exception was never retrieved\n"
"future: <Task finished coro=<bug() done, defined at test.py:3>\n"
" exception=Exception('not consumed')>\n"
"\n"
"Traceback (most recent call last):\n"
" File \"test.py\", line 4, in bug\n"
" raise Exception(\"not consumed\")\n"
"Exception: not consumed"
#: ../../library/asyncio-dev.rst:232
msgid ""
":ref:`Enable the debug mode <asyncio-debug-mode>` to get the traceback "
"where the task was created::"
msgstr "태스크가 만들어진 곳의 트레이스백을 얻으려면 :ref:`디버그 모드를 활성화하세요 <asyncio-debug-mode>`::"
#: ../../library/asyncio-dev.rst:235
msgid "asyncio.run(main(), debug=True)"
msgstr "asyncio.run(main(), debug=True)"
#: ../../library/asyncio-dev.rst:239
msgid ""
"Task exception was never retrieved\n"
"future: <Task finished coro=<bug() done, defined at test.py:3>\n"
" exception=Exception('not consumed') created at asyncio/tasks.py:321>\n"
"\n"
"source_traceback: Object created at (most recent call last):\n"
" File \"../t.py\", line 9, in <module>\n"
" asyncio.run(main(), debug=True)\n"
"\n"
"< .. >\n"
"\n"
"Traceback (most recent call last):\n"
" File \"../t.py\", line 4, in bug\n"
" raise Exception(\"not consumed\")\n"
"Exception: not consumed"
msgstr ""
"Task exception was never retrieved\n"
"future: <Task finished coro=<bug() done, defined at test.py:3>\n"
" exception=Exception('not consumed') created at asyncio/tasks.py:321>\n"
"\n"
"source_traceback: Object created at (most recent call last):\n"
" File \"../t.py\", line 9, in <module>\n"
" asyncio.run(main(), debug=True)\n"
"\n"
"< .. >\n"
"\n"
"Traceback (most recent call last):\n"
" File \"../t.py\", line 4, in bug\n"
" raise Exception(\"not consumed\")\n"
"Exception: not consumed"