-
-
Notifications
You must be signed in to change notification settings - Fork 91
Expand file tree
/
Copy pathinit.po
More file actions
2174 lines (1887 loc) · 103 KB
/
init.po
File metadata and controls
2174 lines (1887 loc) · 103 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
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
# SOME DESCRIPTIVE TITLE.
# Copyright (C) 2001-2024, Python Software Foundation
# This file is distributed under the same license as the Python package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
# Translators:
# cdarlint <cdarling@126.com>, 2020
# Zombie110year <zombie110year@gmail.com>, 2020
# ppcfish <ppcfish@gmail.com>, 2020
# Edward Ji <jiziao6@gmail.com>, 2021
# Jing Li <tes286.lijing@gmail.com>, 2022
# 高乐喆 <gaolezhe@outlook.com>, 2023
# ProgramRipper, 2023
# Freesand Leo <yuqinju@163.com>, 2024
# Rafael Fontenelle <rffontenelle@gmail.com>, 2024
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: Python 3.8\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-08-31 13:50+0000\n"
"PO-Revision-Date: 2020-05-30 11:49+0000\n"
"Last-Translator: Rafael Fontenelle <rffontenelle@gmail.com>, 2024\n"
"Language-Team: Chinese (China) (https://app.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"
#: ../../c-api/init.rst:8
msgid "Initialization, Finalization, and Threads"
msgstr "初始化,最终化和线程"
#: ../../c-api/init.rst:10
msgid "See also :ref:`Python Initialization Configuration <init-config>`."
msgstr "请参阅 :ref:`Python 初始化配置 <init-config>` 。"
#: ../../c-api/init.rst:15
msgid "Before Python Initialization"
msgstr "在Python初始化之前"
#: ../../c-api/init.rst:17
msgid ""
"In an application embedding Python, the :c:func:`Py_Initialize` function "
"must be called before using any other Python/C API functions; with the "
"exception of a few functions and the :ref:`global configuration variables "
"<global-conf-vars>`."
msgstr ""
"在一个植入了 Python 的应用程序中,:c:func:`Py_Initialize` 函数必须在任何其他 Python/C API "
"函数之前被调用;例外的只有个别函数和 :ref:`全局配置变量 <global-conf-vars>`。"
#: ../../c-api/init.rst:22
msgid ""
"The following functions can be safely called before Python is initialized:"
msgstr "在初始化Python之前,可以安全地调用以下函数:"
#: ../../c-api/init.rst:24
msgid "Configuration functions:"
msgstr "配置函数:"
#: ../../c-api/init.rst:26
msgid ":c:func:`PyImport_AppendInittab`"
msgstr ":c:func:`PyImport_AppendInittab`"
#: ../../c-api/init.rst:27
msgid ":c:func:`PyImport_ExtendInittab`"
msgstr ":c:func:`PyImport_ExtendInittab`"
#: ../../c-api/init.rst:28
msgid ":c:func:`PyInitFrozenExtensions`"
msgstr ":c:func:`PyInitFrozenExtensions`"
#: ../../c-api/init.rst:29
msgid ":c:func:`PyMem_SetAllocator`"
msgstr ":c:func:`PyMem_SetAllocator`"
#: ../../c-api/init.rst:30
msgid ":c:func:`PyMem_SetupDebugHooks`"
msgstr ":c:func:`PyMem_SetupDebugHooks`"
#: ../../c-api/init.rst:31
msgid ":c:func:`PyObject_SetArenaAllocator`"
msgstr ":c:func:`PyObject_SetArenaAllocator`"
#: ../../c-api/init.rst:32
msgid ":c:func:`Py_SetPath`"
msgstr ":c:func:`Py_SetPath`"
#: ../../c-api/init.rst:33
msgid ":c:func:`Py_SetProgramName`"
msgstr ":c:func:`Py_SetProgramName`"
#: ../../c-api/init.rst:34
msgid ":c:func:`Py_SetPythonHome`"
msgstr ":c:func:`Py_SetPythonHome`"
#: ../../c-api/init.rst:35
msgid ":c:func:`Py_SetStandardStreamEncoding`"
msgstr ":c:func:`Py_SetStandardStreamEncoding`"
#: ../../c-api/init.rst:36
msgid ":c:func:`PySys_AddWarnOption`"
msgstr ":c:func:`PySys_AddWarnOption`"
#: ../../c-api/init.rst:37
msgid ":c:func:`PySys_AddXOption`"
msgstr ":c:func:`PySys_AddXOption`"
#: ../../c-api/init.rst:38
msgid ":c:func:`PySys_ResetWarnOptions`"
msgstr ":c:func:`PySys_ResetWarnOptions`"
#: ../../c-api/init.rst:40
msgid "Informative functions:"
msgstr "信息函数:"
#: ../../c-api/init.rst:42
msgid ":c:func:`Py_IsInitialized`"
msgstr ":c:func:`Py_IsInitialized`"
#: ../../c-api/init.rst:43
msgid ":c:func:`PyMem_GetAllocator`"
msgstr ":c:func:`PyMem_GetAllocator`"
#: ../../c-api/init.rst:44
msgid ":c:func:`PyObject_GetArenaAllocator`"
msgstr ":c:func:`PyObject_GetArenaAllocator`"
#: ../../c-api/init.rst:45
msgid ":c:func:`Py_GetBuildInfo`"
msgstr ":c:func:`Py_GetBuildInfo`"
#: ../../c-api/init.rst:46
msgid ":c:func:`Py_GetCompiler`"
msgstr ":c:func:`Py_GetCompiler`"
#: ../../c-api/init.rst:47
msgid ":c:func:`Py_GetCopyright`"
msgstr ":c:func:`Py_GetCopyright`"
#: ../../c-api/init.rst:48
msgid ":c:func:`Py_GetPlatform`"
msgstr ":c:func:`Py_GetPlatform`"
#: ../../c-api/init.rst:49
msgid ":c:func:`Py_GetVersion`"
msgstr ":c:func:`Py_GetVersion`"
#: ../../c-api/init.rst:51
msgid "Utilities:"
msgstr "工具"
#: ../../c-api/init.rst:53
msgid ":c:func:`Py_DecodeLocale`"
msgstr ":c:func:`Py_DecodeLocale`"
#: ../../c-api/init.rst:55
msgid "Memory allocators:"
msgstr "内存分配器:"
#: ../../c-api/init.rst:57
msgid ":c:func:`PyMem_RawMalloc`"
msgstr ":c:func:`PyMem_RawMalloc`"
#: ../../c-api/init.rst:58
msgid ":c:func:`PyMem_RawRealloc`"
msgstr ":c:func:`PyMem_RawRealloc`"
#: ../../c-api/init.rst:59
msgid ":c:func:`PyMem_RawCalloc`"
msgstr ":c:func:`PyMem_RawCalloc`"
#: ../../c-api/init.rst:60
msgid ":c:func:`PyMem_RawFree`"
msgstr ":c:func:`PyMem_RawFree`"
#: ../../c-api/init.rst:64
msgid ""
"The following functions **should not be called** before "
":c:func:`Py_Initialize`: :c:func:`Py_EncodeLocale`, :c:func:`Py_GetPath`, "
":c:func:`Py_GetPrefix`, :c:func:`Py_GetExecPrefix`, "
":c:func:`Py_GetProgramFullPath`, :c:func:`Py_GetPythonHome`, "
":c:func:`Py_GetProgramName` and :c:func:`PyEval_InitThreads`."
msgstr ""
"以下函数 **不应该** 在 :c:func:`Py_Initialize`: :c:func:`Py_EncodeLocale`, "
":c:func:`Py_GetPath`, :c:func:`Py_GetPrefix`, :c:func:`Py_GetExecPrefix`, "
":c:func:`Py_GetProgramFullPath`, :c:func:`Py_GetPythonHome`, "
":c:func:`Py_GetProgramName` 和 :c:func:`PyEval_InitThreads` 前调用。"
#: ../../c-api/init.rst:74
msgid "Global configuration variables"
msgstr "全局配置变量"
#: ../../c-api/init.rst:76
msgid ""
"Python has variables for the global configuration to control different "
"features and options. By default, these flags are controlled by "
":ref:`command line options <using-on-interface-options>`."
msgstr ""
"Python 有负责控制全局配置中不同特性和选项的变量。这些标志默认被 :ref:`命令行选项 <using-on-interface-"
"options>`。"
#: ../../c-api/init.rst:80
msgid ""
"When a flag is set by an option, the value of the flag is the number of "
"times that the option was set. For example, ``-b`` sets "
":c:data:`Py_BytesWarningFlag` to 1 and ``-bb`` sets "
":c:data:`Py_BytesWarningFlag` to 2."
msgstr ""
"当一个选项设置一个旗标时,该旗标的值将是设置选项的次数。 例如,``-b`` 会将 :c:data:`Py_BytesWarningFlag` 设为 1"
" 而 ``-bb`` 会将 :c:data:`Py_BytesWarningFlag` 设为 2."
#: ../../c-api/init.rst:86
msgid ""
"Issue a warning when comparing :class:`bytes` or :class:`bytearray` with "
":class:`str` or :class:`bytes` with :class:`int`. Issue an error if greater"
" or equal to ``2``."
msgstr ""
"当将 :class:`bytes` 或 :class:`bytearray` 与 :class:`str` 比较或者将 :class:`bytes` 与"
" :class:`int` 比较时发出警告。 如果大于等于 ``2`` 则报错。"
#: ../../c-api/init.rst:90
msgid "Set by the :option:`-b` option."
msgstr "由 :option:`-b` 选项设置。"
#: ../../c-api/init.rst:94
msgid ""
"Turn on parser debugging output (for expert only, depending on compilation "
"options)."
msgstr "开启解析器调试输出(限专家使用,依赖于编译选项)。"
#: ../../c-api/init.rst:97
msgid ""
"Set by the :option:`-d` option and the :envvar:`PYTHONDEBUG` environment "
"variable."
msgstr "由 :option:`-d` 选项和 :envvar:`PYTHONDEBUG` 环境变量设置。"
#: ../../c-api/init.rst:102
msgid ""
"If set to non-zero, Python won't try to write ``.pyc`` files on the import "
"of source modules."
msgstr "如果设置为非零, Python 不会在导入源代码时尝试写入 ``.pyc`` 文件"
#: ../../c-api/init.rst:105
msgid ""
"Set by the :option:`-B` option and the :envvar:`PYTHONDONTWRITEBYTECODE` "
"environment variable."
msgstr "由 :option:`-B` 选项和 :envvar:`PYTHONDONTWRITEBYTECODE` 环境变量设置。"
#: ../../c-api/init.rst:110
msgid ""
"Suppress error messages when calculating the module search path in "
":c:func:`Py_GetPath`."
msgstr "当在 :c:func:`Py_GetPath` 中计算模块搜索路径时屏蔽错误消息。"
#: ../../c-api/init.rst:113
msgid ""
"Private flag used by ``_freeze_importlib`` and ``frozenmain`` programs."
msgstr "由 ``_freeze_importlib`` 和 ``frozenmain`` 程序使用的私有旗标。"
#: ../../c-api/init.rst:117
msgid ""
"Set to ``1`` if the :envvar:`PYTHONHASHSEED` environment variable is set to "
"a non-empty string."
msgstr "如果 :envvar:`PYTHONHASHSEED` 环境变量被设为非空字符串则设为 ``1``。"
#: ../../c-api/init.rst:120
msgid ""
"If the flag is non-zero, read the :envvar:`PYTHONHASHSEED` environment "
"variable to initialize the secret hash seed."
msgstr "如果该旗标为非零值,则读取 :envvar:`PYTHONHASHSEED` 环境变量来初始化加密哈希种子。"
#: ../../c-api/init.rst:125
msgid ""
"Ignore all :envvar:`PYTHON*` environment variables, e.g. "
":envvar:`PYTHONPATH` and :envvar:`PYTHONHOME`, that might be set."
msgstr ""
"忽略所有 :envvar:`PYTHON*` 环境变量,例如,已设置的 :envvar:`PYTHONPATH` 和 "
":envvar:`PYTHONHOME`。"
#: ../../c-api/init.rst:128
msgid "Set by the :option:`-E` and :option:`-I` options."
msgstr "由 :option:`-E` 和 :option:`-I` 选项设置。"
#: ../../c-api/init.rst:132
msgid ""
"When a script is passed as first argument or the :option:`-c` option is "
"used, enter interactive mode after executing the script or the command, even"
" when :data:`sys.stdin` does not appear to be a terminal."
msgstr ""
"当将脚本作为第一个参数传入或是使用了 :option:`-c` 选项时,则会在执行该脚本或命令后进入交互模式,即使在 :data:`sys.stdin`"
" 并非一个终端时也是如此。"
#: ../../c-api/init.rst:136
msgid ""
"Set by the :option:`-i` option and the :envvar:`PYTHONINSPECT` environment "
"variable."
msgstr "由 :option:`-i` 选项和 :envvar:`PYTHONINSPECT` 环境变量设置。"
#: ../../c-api/init.rst:141
msgid "Set by the :option:`-i` option."
msgstr "由 :option:`-i` 选项设置。"
#: ../../c-api/init.rst:145
msgid ""
"Run Python in isolated mode. In isolated mode :data:`sys.path` contains "
"neither the script's directory nor the user's site-packages directory."
msgstr ""
"以隔离模式运行 Python. 在隔离模式下 :data:`sys.path` 将不包含脚本的目录或用户的 site-packages 目录。"
#: ../../c-api/init.rst:148
msgid "Set by the :option:`-I` option."
msgstr "由 :option:`-I` 选项设置。"
#: ../../c-api/init.rst:154
msgid ""
"If the flag is non-zero, use the ``mbcs`` encoding instead of the UTF-8 "
"encoding for the filesystem encoding."
msgstr ""
#: ../../c-api/init.rst:157
msgid ""
"Set to ``1`` if the :envvar:`PYTHONLEGACYWINDOWSFSENCODING` environment "
"variable is set to a non-empty string."
msgstr "如果 :envvar:`PYTHONLEGACYWINDOWSFSENCODING` 环境变量被设为非空字符串则设为 ``1``。"
#: ../../c-api/init.rst:160
msgid "See :pep:`529` for more details."
msgstr "更多详情请参阅 :pep:`529`。"
#: ../../c-api/init.rst:162 ../../c-api/init.rst:174
msgid ":ref:`Availability <availability>`: Windows."
msgstr ":ref:`可用性 <availability>`: Windows。"
#: ../../c-api/init.rst:166
msgid ""
"If the flag is non-zero, use :class:`io.FileIO` instead of "
":class:`WindowsConsoleIO` for :mod:`sys` standard streams."
msgstr ""
"如果该旗标为非零值,则会使用 :class:`io.FileIO` 而不是 :class:`WindowsConsoleIO` 作为 "
":mod:`sys` 的标准流。"
#: ../../c-api/init.rst:169
msgid ""
"Set to ``1`` if the :envvar:`PYTHONLEGACYWINDOWSSTDIO` environment variable "
"is set to a non-empty string."
msgstr "如果 :envvar:`PYTHONLEGACYWINDOWSSTDIO` 环境变量被设为非空字符串则设为 ``1``。"
#: ../../c-api/init.rst:172
msgid "See :pep:`528` for more details."
msgstr "有关更多详细信息,请参阅 :pep:`528`。"
#: ../../c-api/init.rst:178
msgid ""
"Disable the import of the module :mod:`site` and the site-dependent "
"manipulations of :data:`sys.path` that it entails. Also disable these "
"manipulations if :mod:`site` is explicitly imported later (call "
":func:`site.main` if you want them to be triggered)."
msgstr ""
"禁用 :mod:`site` 的导入及其所附带的基于站点对 :data:`sys.path` 的操作。 如果 :mod:`site` "
"会在稍后被显式地导入也会禁用这些操作 (如果你希望触发它们则应调用 :func:`site.main`)。"
#: ../../c-api/init.rst:183
msgid "Set by the :option:`-S` option."
msgstr "由 :option:`-S` 选项设置。"
#: ../../c-api/init.rst:187
msgid ""
"Don't add the :data:`user site-packages directory <site.USER_SITE>` to "
":data:`sys.path`."
msgstr ""
"不要将 :data:`用户 site-packages 目录 <site.USER_SITE>` 添加到 :data:`sys.path`。"
#: ../../c-api/init.rst:190
msgid ""
"Set by the :option:`-s` and :option:`-I` options, and the "
":envvar:`PYTHONNOUSERSITE` environment variable."
msgstr "由 :option:`-s` 和 :option:`-I` 选项以及 :envvar:`PYTHONNOUSERSITE` 环境变量设置。"
#: ../../c-api/init.rst:195
msgid ""
"Set by the :option:`-O` option and the :envvar:`PYTHONOPTIMIZE` environment "
"variable."
msgstr "由 :option:`-O` 选项和 :envvar:`PYTHONOPTIMIZE` 环境变量设置。"
#: ../../c-api/init.rst:200
msgid ""
"Don't display the copyright and version messages even in interactive mode."
msgstr "即使在交互模式下也不显示版权和版本信息。"
#: ../../c-api/init.rst:202
msgid "Set by the :option:`-q` option."
msgstr "由 :option:`-q` 选项设置。"
#: ../../c-api/init.rst:208
msgid "Force the stdout and stderr streams to be unbuffered."
msgstr "强制 stdout 和 stderr 流不带缓冲。"
#: ../../c-api/init.rst:210
msgid ""
"Set by the :option:`-u` option and the :envvar:`PYTHONUNBUFFERED` "
"environment variable."
msgstr "由 :option:`-u` 选项和 :envvar:`PYTHONUNBUFFERED` 环境变量设置。"
#: ../../c-api/init.rst:215
msgid ""
"Print a message each time a module is initialized, showing the place "
"(filename or built-in module) from which it is loaded. If greater or equal "
"to ``2``, print a message for each file that is checked for when searching "
"for a module. Also provides information on module cleanup at exit."
msgstr ""
"每次初始化模块时打印一条消息,显示加载模块的位置(文件名或内置模块)。 如果大于或等于 ``2``,则为搜索模块时检查的每个文件打印一条消息。 "
"此外还会在退出时提供模块清理信息。"
#: ../../c-api/init.rst:220
msgid ""
"Set by the :option:`-v` option and the :envvar:`PYTHONVERBOSE` environment "
"variable."
msgstr "由 :option:`-v` 选项和 :envvar:`PYTHONVERBOSE` 环境变量设置。"
#: ../../c-api/init.rst:225
msgid "Initializing and finalizing the interpreter"
msgstr "初始化和最终化解释器"
#: ../../c-api/init.rst:243
msgid ""
"Initialize the Python interpreter. In an application embedding Python, "
"this should be called before using any other Python/C API functions; see "
":ref:`Before Python Initialization <pre-init-safe>` for the few exceptions."
msgstr ""
"初始化 Python 解释器。 在嵌入 Python 的应用程序中,它应当在使用任何其他 Python/C API 函数之前被调用;请参阅 "
":ref:`在 Python 初始化之前 <pre-init-safe>` 了解少数的例外情况。"
#: ../../c-api/init.rst:247
msgid ""
"This initializes the table of loaded modules (``sys.modules``), and creates "
"the fundamental modules :mod:`builtins`, :mod:`__main__` and :mod:`sys`. It"
" also initializes the module search path (``sys.path``). It does not set "
"``sys.argv``; use :c:func:`PySys_SetArgvEx` for that. This is a no-op when "
"called for a second time (without calling :c:func:`Py_FinalizeEx` first). "
"There is no return value; it is a fatal error if the initialization fails."
msgstr ""
"这将初始化已加载模块表 (``sys.modules``),并创建基本模块 :mod:`builtins`、:mod:`__main__` 和 "
":mod:`sys`。 它还会初始化模块搜索路径 (``sys.path``)。 它不会设置 ``sys.argv``;如有需要请使用 "
":c:func:`PySys_SetArgvEx`。 当第二次调用时 (在未事先调用 :c:func:`Py_FinalizeEx` 的情况下) "
"将不会执行任何操作。 它没有返回值;如果初始化失败则会发生致命错误。"
#: ../../c-api/init.rst:256
msgid ""
"On Windows, changes the console mode from ``O_TEXT`` to ``O_BINARY``, which "
"will also affect non-Python uses of the console using the C Runtime."
msgstr ""
"在 Windows 上,将控制台模式从 ``O_TEXT`` 改为 ``O_BINARY``,这还将影响使用 C 运行时的非 Python "
"的控制台使用。"
#: ../../c-api/init.rst:262
msgid ""
"This function works like :c:func:`Py_Initialize` if *initsigs* is ``1``. If "
"*initsigs* is ``0``, it skips initialization registration of signal "
"handlers, which might be useful when Python is embedded."
msgstr ""
"如果 *initsigs* 为 ``1`` 则该函数的工作方式与 :c:func:`Py_Initialize` 类似。 如果 *initsigs* 为"
" ``0``,它将跳过信号处理器的初始化注册,这在嵌入 Python 时可能会很有用处。"
#: ../../c-api/init.rst:269
msgid ""
"Return true (nonzero) when the Python interpreter has been initialized, "
"false (zero) if not. After :c:func:`Py_FinalizeEx` is called, this returns "
"false until :c:func:`Py_Initialize` is called again."
msgstr ""
"如果 Python 解释器已初始化,则返回真值(非零);否则返回假值(零)。 在调用 :c:func:`Py_FinalizeEx` "
"之后,此函数将返回假值直到 :c:func:`Py_Initialize` 再次被调用。"
#: ../../c-api/init.rst:276
msgid ""
"Undo all initializations made by :c:func:`Py_Initialize` and subsequent use "
"of Python/C API functions, and destroy all sub-interpreters (see "
":c:func:`Py_NewInterpreter` below) that were created and not yet destroyed "
"since the last call to :c:func:`Py_Initialize`. Ideally, this frees all "
"memory allocated by the Python interpreter. This is a no-op when called for"
" a second time (without calling :c:func:`Py_Initialize` again first). "
"Normally the return value is ``0``. If there were errors during "
"finalization (flushing buffered data), ``-1`` is returned."
msgstr ""
"撤销 :c:func:`Py_Initialize` 所做的所有初始化操作和后续对 Python/C API 函数的使用,并销毁自上次调用 "
":c:func:`Py_Initialize` 以来创建但尚未销毁的所有子解释器(参见下文 :c:func:`Py_NewInterpreter` "
"一节)。 在理想情况下,这会释放 Python 解释器分配的所有内存。 当第二次调用时(在未再次调用 :c:func:`Py_Initialize` "
"的情况下),这将不执行任何操作。 正常情况下返回值是 ``0``。 如果在最终化(刷新缓冲数据)过程中出现错误,则返回 ``-1``。"
#: ../../c-api/init.rst:285
msgid ""
"This function is provided for a number of reasons. An embedding application"
" might want to restart Python without having to restart the application "
"itself. An application that has loaded the Python interpreter from a "
"dynamically loadable library (or DLL) might want to free all memory "
"allocated by Python before unloading the DLL. During a hunt for memory leaks"
" in an application a developer might want to free all memory allocated by "
"Python before exiting from the application."
msgstr ""
"提供此函数的原因有很多。嵌入应用程序可能希望重新启动Python,而不必重新启动应用程序本身。从动态可加载库(或DLL)加载Python解释器的应用程序可能希望在卸载DLL之前释放Python分配的所有内存。在搜索应用程序内存泄漏的过程中,开发人员可能希望在退出应用程序之前释放Python分配的所有内存。"
#: ../../c-api/init.rst:293
msgid ""
"**Bugs and caveats:** The destruction of modules and objects in modules is "
"done in random order; this may cause destructors (:meth:`__del__` methods) "
"to fail when they depend on other objects (even functions) or modules. "
"Dynamically loaded extension modules loaded by Python are not unloaded. "
"Small amounts of memory allocated by the Python interpreter may not be freed"
" (if you find a leak, please report it). Memory tied up in circular "
"references between objects is not freed. Some memory allocated by extension"
" modules may not be freed. Some extensions may not work properly if their "
"initialization routine is called more than once; this can happen if an "
"application calls :c:func:`Py_Initialize` and :c:func:`Py_FinalizeEx` more "
"than once."
msgstr ""
#: ../../c-api/init.rst:305
msgid ""
"Raises an :ref:`auditing event <auditing>` "
"``cpython._PySys_ClearAuditHooks`` with no arguments."
msgstr "引发一个不带参数的 :ref:`审计事件 <auditing>` ``cpython._PySys_ClearAuditHooks``。"
#: ../../c-api/init.rst:310
msgid ""
"This is a backwards-compatible version of :c:func:`Py_FinalizeEx` that "
"disregards the return value."
msgstr "这是一个不考虑返回值的 :c:func:`Py_FinalizeEx` 的向下兼容版本。"
#: ../../c-api/init.rst:315
msgid "Process-wide parameters"
msgstr "进程级参数"
#: ../../c-api/init.rst:325
msgid ""
"This function should be called before :c:func:`Py_Initialize`, if it is "
"called at all. It specifies which encoding and error handling to use with "
"standard IO, with the same meanings as in :func:`str.encode`."
msgstr ""
"如果要调用该函数,应当在 :c:func:`Py_Initialize` 之前调用。 它指定了标准 IO 使用的编码格式和错误处理方式,其含义与 "
":func:`str.encode` 中的相同。"
#: ../../c-api/init.rst:329
msgid ""
"It overrides :envvar:`PYTHONIOENCODING` values, and allows embedding code to"
" control IO encoding when the environment variable does not work."
msgstr "它覆盖了 :envvar:`PYTHONIOENCODING` 的值,并允许嵌入代码以便在环境变量不起作用时控制 IO 编码格式。"
#: ../../c-api/init.rst:332
msgid ""
"*encoding* and/or *errors* may be ``NULL`` to use :envvar:`PYTHONIOENCODING`"
" and/or default values (depending on other settings)."
msgstr ""
"*encoding* 和/或 *errors* 可以为 ``NULL`` 以使用 :envvar:`PYTHONIOENCODING` "
"和/或默认值(取决于其他设置)。"
#: ../../c-api/init.rst:336
msgid ""
"Note that :data:`sys.stderr` always uses the \"backslashreplace\" error "
"handler, regardless of this (or any other) setting."
msgstr "请注意无论是否有此设置(或任何其他设置),:data:`sys.stderr` 都会使用 \"backslashreplace\" 错误处理器。"
#: ../../c-api/init.rst:339
msgid ""
"If :c:func:`Py_FinalizeEx` is called, this function will need to be called "
"again in order to affect subsequent calls to :c:func:`Py_Initialize`."
msgstr ""
"如果调用了 :c:func:`Py_FinalizeEx`,则需要再次调用该函数以便影响对 :c:func:`Py_Initialize` 的后续调用。"
#: ../../c-api/init.rst:342
msgid ""
"Returns ``0`` if successful, a nonzero value on error (e.g. calling after "
"the interpreter has already been initialized)."
msgstr "成功时返回 ``0``,出错时返回非零值(例如在解释器已被初始化后再调用)。"
#: ../../c-api/init.rst:355
msgid ""
"This function should be called before :c:func:`Py_Initialize` is called for "
"the first time, if it is called at all. It tells the interpreter the value "
"of the ``argv[0]`` argument to the :c:func:`main` function of the program "
"(converted to wide characters). This is used by :c:func:`Py_GetPath` and "
"some other functions below to find the Python run-time libraries relative to"
" the interpreter executable. The default value is ``'python'``. The "
"argument should point to a zero-terminated wide character string in static "
"storage whose contents will not change for the duration of the program's "
"execution. No code in the Python interpreter will change the contents of "
"this storage."
msgstr ""
"如果要调用该函数,应当在首次调用 :c:func:`Py_Initialize` 之前调用它。 它将告诉解释器程序的 :c:func:`main` "
"函数的 ``argv[0]`` 参数的值(转换为宽字符)。 :c:func:`Py_GetPath` "
"和下面的某些其他函数会使用它在相对于解释器的位置上查找可执行文件的 Python 运行时库。 默认值是 ``'python'``。 "
"参数应当指向静态存储中的一个以零值结束的宽字符串,其内容在程序执行期间不会发生改变。 Python 解释器中的任何代码都不会改变该存储的内容。"
#: ../../c-api/init.rst:366 ../../c-api/init.rst:480 ../../c-api/init.rst:586
#: ../../c-api/init.rst:613 ../../c-api/init.rst:630
msgid ""
"Use :c:func:`Py_DecodeLocale` to decode a bytes string to get a "
":c:type:`wchar_*` string."
msgstr ""
#: ../../c-api/init.rst:374
msgid ""
"Return the program name set with :c:func:`Py_SetProgramName`, or the "
"default. The returned string points into static storage; the caller should "
"not modify its value."
msgstr ""
"返回用 :c:func:`Py_SetProgramName` 设置的程序名称,或默认的名称。 返回的字符串指向静态存储;调用者不应修改其值。"
#: ../../c-api/init.rst:381
msgid ""
"Return the *prefix* for installed platform-independent files. This is "
"derived through a number of complicated rules from the program name set with"
" :c:func:`Py_SetProgramName` and some environment variables; for example, if"
" the program name is ``'/usr/local/bin/python'``, the prefix is "
"``'/usr/local'``. The returned string points into static storage; the caller"
" should not modify its value. This corresponds to the :makevar:`prefix` "
"variable in the top-level :file:`Makefile` and the ``--prefix`` argument to "
"the :program:`configure` script at build time. The value is available to "
"Python code as ``sys.prefix``. It is only useful on Unix. See also the next"
" function."
msgstr ""
#: ../../c-api/init.rst:394
msgid ""
"Return the *exec-prefix* for installed platform-*dependent* files. This is "
"derived through a number of complicated rules from the program name set with"
" :c:func:`Py_SetProgramName` and some environment variables; for example, if"
" the program name is ``'/usr/local/bin/python'``, the exec-prefix is "
"``'/usr/local'``. The returned string points into static storage; the "
"caller should not modify its value. This corresponds to the "
":makevar:`exec_prefix` variable in the top-level :file:`Makefile` and the "
"``--exec-prefix`` argument to the :program:`configure` script at build "
"time. The value is available to Python code as ``sys.exec_prefix``. It is "
"only useful on Unix."
msgstr ""
"返回针对已安装的 *依赖于* 平台文件的 *exec-prefix*。 这是通过基于使用 :c:func:`Py_SetProgramName` "
"设置的程序名称和某些环境变量所派生的一系列复杂规则获得的;举例来说,如果程序名称为 ``'/usr/local/bin/python'``,则 "
"exec-prefix 为 ``'/usr/local'``。 返回的字符串将指向静态存储;调用方不应修改其值。 这对应于最高层级 "
":file:`Makefile` 中的 :makevar:`exec_prefix` 变量以及在编译时传给 :program:`configure` "
"脚本的 ``--exec-prefix`` 参数。 该值将以 ``sys.exec_prefix`` 的名称供 Python 代码使用。 它仅适用于 "
"Unix。"
#: ../../c-api/init.rst:404
msgid ""
"Background: The exec-prefix differs from the prefix when platform dependent "
"files (such as executables and shared libraries) are installed in a "
"different directory tree. In a typical installation, platform dependent "
"files may be installed in the :file:`/usr/local/plat` subtree while platform"
" independent may be installed in :file:`/usr/local`."
msgstr ""
"背景:当依赖于平台的文件(如可执行文件和共享库)是安装于不同的目录树中的时候 exec-prefix 将会不同于 prefix。 "
"在典型的安装中,依赖于平台的文件可能安装于 the :file:`/usr/local/plat` 子目录树而独立于平台的文件可能安装于 "
":file:`/usr/local`。"
#: ../../c-api/init.rst:410
msgid ""
"Generally speaking, a platform is a combination of hardware and software "
"families, e.g. Sparc machines running the Solaris 2.x operating system are "
"considered the same platform, but Intel machines running Solaris 2.x are "
"another platform, and Intel machines running Linux are yet another platform."
" Different major revisions of the same operating system generally also form"
" different platforms. Non-Unix operating systems are a different story; the"
" installation strategies on those systems are so different that the prefix "
"and exec-prefix are meaningless, and set to the empty string. Note that "
"compiled Python bytecode files are platform independent (but not independent"
" from the Python version by which they were compiled!)."
msgstr ""
"总而言之,平台是一组硬件和软件资源的组合,例如所有运行 Solaris 2.x 操作系统的 Sparc 机器会被视为相同平台,但运行 Solaris "
"2.x 的 Intel 机器是另一种平台,而运行 Linux 的 Intel 机器又是另一种平台。 相同操作系统的不同主要发布版通常也会构成不同的平台。"
" 非 Unix 操作系统的情况又有所不同;这类系统上的安装策略差别巨大因此 prefix 和 exec-prefix 是没有意义的,并将被设为空字符串。"
" 请注意已编译的 Python 字节码是独立于平台的(但并不独立于它们编译时所使用的 Python 版本!)"
#: ../../c-api/init.rst:421
msgid ""
"System administrators will know how to configure the :program:`mount` or "
":program:`automount` programs to share :file:`/usr/local` between platforms "
"while having :file:`/usr/local/plat` be a different filesystem for each "
"platform."
msgstr ""
"系统管理员知道如何配置 :program:`mount` 或 :program:`automount` 程序以在平台间共享 "
":file:`/usr/local` 而让 :file:`/usr/local/plat` 成为针对不同平台的不同文件系统。"
#: ../../c-api/init.rst:433
msgid ""
"Return the full program name of the Python executable; this is computed as "
"a side-effect of deriving the default module search path from the program "
"name (set by :c:func:`Py_SetProgramName` above). The returned string points "
"into static storage; the caller should not modify its value. The value is "
"available to Python code as ``sys.executable``."
msgstr ""
"返回 Python 可执行文件的完整程序名称;这是作为根据程序名称(由上述 :c:func:`Py_SetProgramName` "
"设置)派生默认模块搜索路径的附带影响计算得出的。 返回的字符串将指向静态存储;调用方不应修改其值。 该值将以 ``sys.executable`` "
"的名称供 Python 代码使用。"
#: ../../c-api/init.rst:447
msgid ""
"Return the default module search path; this is computed from the program "
"name (set by :c:func:`Py_SetProgramName` above) and some environment "
"variables. The returned string consists of a series of directory names "
"separated by a platform dependent delimiter character. The delimiter "
"character is ``':'`` on Unix and Mac OS X, ``';'`` on Windows. The returned"
" string points into static storage; the caller should not modify its value."
" The list :data:`sys.path` is initialized with this value on interpreter "
"startup; it can be (and usually is) modified later to change the search path"
" for loading modules."
msgstr ""
#: ../../c-api/init.rst:467
msgid ""
"Set the default module search path. If this function is called before "
":c:func:`Py_Initialize`, then :c:func:`Py_GetPath` won't attempt to compute "
"a default search path but uses the one provided instead. This is useful if "
"Python is embedded by an application that has full knowledge of the location"
" of all modules. The path components should be separated by the platform "
"dependent delimiter character, which is ``':'`` on Unix and Mac OS X, "
"``';'`` on Windows."
msgstr ""
#: ../../c-api/init.rst:475
msgid ""
"This also causes :data:`sys.executable` to be set to the program full path "
"(see :c:func:`Py_GetProgramFullPath`) and for :data:`sys.prefix` and "
":data:`sys.exec_prefix` to be empty. It is up to the caller to modify these"
" if required after calling :c:func:`Py_Initialize`."
msgstr ""
"这也将导致 :data:`sys.executable` 被设为程序的完整路径 (参见 :c:func:`Py_GetProgramFullPath`)"
" 而 :data:`sys.prefix` 和 :data:`sys.exec_prefix` 变为空值。 如果在调用 "
":c:func:`Py_Initialize` 之后有需要则应由调用方来修改它们。"
#: ../../c-api/init.rst:483
msgid ""
"The path argument is copied internally, so the caller may free it after the "
"call completes."
msgstr "路径参数会在内部被复制,使调用方可以在调用结束后释放它。"
#: ../../c-api/init.rst:486
msgid ""
"The program full path is now used for :data:`sys.executable`, instead of the"
" program name."
msgstr "现在 :data:`sys.executable` 将使用程序的完整路径,而不是程序文件名。"
#: ../../c-api/init.rst:493
msgid ""
"Return the version of this Python interpreter. This is a string that looks "
"something like ::"
msgstr "返回 Python 解释器的版本。 这将为如下形式的字符串 ::"
#: ../../c-api/init.rst:500
msgid ""
"The first word (up to the first space character) is the current Python "
"version; the first three characters are the major and minor version "
"separated by a period. The returned string points into static storage; the "
"caller should not modify its value. The value is available to Python code "
"as :data:`sys.version`."
msgstr ""
#: ../../c-api/init.rst:510
msgid ""
"Return the platform identifier for the current platform. On Unix, this is "
"formed from the \"official\" name of the operating system, converted to "
"lower case, followed by the major revision number; e.g., for Solaris 2.x, "
"which is also known as SunOS 5.x, the value is ``'sunos5'``. On Mac OS X, "
"it is ``'darwin'``. On Windows, it is ``'win'``. The returned string "
"points into static storage; the caller should not modify its value. The "
"value is available to Python code as ``sys.platform``."
msgstr ""
#: ../../c-api/init.rst:521
msgid ""
"Return the official copyright string for the current Python version, for "
"example"
msgstr "返回当前 Python 版本的官方版权字符串,例如"
#: ../../c-api/init.rst:523
msgid "``'Copyright 1991-1995 Stichting Mathematisch Centrum, Amsterdam'``"
msgstr "``'Copyright 1991-1995 Stichting Mathematisch Centrum, Amsterdam'``"
#: ../../c-api/init.rst:527
msgid ""
"The returned string points into static storage; the caller should not modify"
" its value. The value is available to Python code as ``sys.copyright``."
msgstr "返回的字符串指向静态存储;调用者不应修改其值。 Python 代码可通过 ``sys.copyright`` 获取该值。"
#: ../../c-api/init.rst:533
msgid ""
"Return an indication of the compiler used to build the current Python "
"version, in square brackets, for example::"
msgstr "返回用于编译当前 Python 版本的编译器指令,为带方括号的形式,例如::"
#: ../../c-api/init.rst:540 ../../c-api/init.rst:554
msgid ""
"The returned string points into static storage; the caller should not modify"
" its value. The value is available to Python code as part of the variable "
"``sys.version``."
msgstr "返回的字符串指向静态存储;调用者不应修改其值。 Python 代码可以从变量 ``sys.version`` 中获取该值。"
#: ../../c-api/init.rst:547
msgid ""
"Return information about the sequence number and build date and time of the"
" current Python interpreter instance, for example ::"
msgstr "返回有关当前Python解释器实例的序列号和构建日期和时间的信息,例如:"
#: ../../c-api/init.rst:566
msgid ""
"Set :data:`sys.argv` based on *argc* and *argv*. These parameters are "
"similar to those passed to the program's :c:func:`main` function with the "
"difference that the first entry should refer to the script file to be "
"executed rather than the executable hosting the Python interpreter. If "
"there isn't a script that will be run, the first entry in *argv* can be an "
"empty string. If this function fails to initialize :data:`sys.argv`, a "
"fatal condition is signalled using :c:func:`Py_FatalError`."
msgstr ""
"根据 *argc* 和 *argv* 设置 :data:`sys.argv`。 这些形参与传给程序的 :c:func:`main` "
"函数的类似,区别在于第一项应当指向要执行的脚本文件而不是 Python 解释器对应的可执行文件。 如果没有要运行的脚本,则 *argv* "
"中的第一项可以为空字符串。 如果此函数无法初始化 :data:`sys.argv`,则将使用 :c:func:`Py_FatalError` "
"发出严重情况信号。"
#: ../../c-api/init.rst:574
msgid ""
"If *updatepath* is zero, this is all the function does. If *updatepath* is "
"non-zero, the function also modifies :data:`sys.path` according to the "
"following algorithm:"
msgstr ""
"如果 *updatepath* 为零,此函数将完成操作。 如果 *updatepath* 为非零值,则此函数还将根据以下算法修改 "
":data:`sys.path`:"
#: ../../c-api/init.rst:578
msgid ""
"If the name of an existing script is passed in ``argv[0]``, the absolute "
"path of the directory where the script is located is prepended to "
":data:`sys.path`."
msgstr "如果在 ``argv[0]`` 中传入一个现有脚本,则脚本所在目录的绝对路径将被添加到 :data:`sys.path` 的开头。"
#: ../../c-api/init.rst:581
msgid ""
"Otherwise (that is, if *argc* is ``0`` or ``argv[0]`` doesn't point to an "
"existing file name), an empty string is prepended to :data:`sys.path`, which"
" is the same as prepending the current working directory (``\".\"``)."
msgstr ""
"在其他情况下 (也就是说,如果 *argc* 为 ``0`` 或 ``argv[0]`` 未指向现有文件名),则将在 :data:`sys.path` "
"的开头添加一个空字符串,这等价于添加当前工作目录 (``\".\"``)。"
#: ../../c-api/init.rst:590
msgid ""
"It is recommended that applications embedding the Python interpreter for "
"purposes other than executing a single script pass ``0`` as *updatepath*, "
"and update :data:`sys.path` themselves if desired. See `CVE-2008-5983 "
"<https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2008-5983>`_."
msgstr ""
"建议在出于执行单个脚本以外的目的嵌入 Python 解释器的应用程序传入 ``0`` 作为 *updatepath*,并在需要时更新 "
":data:`sys.path` 本身。 参见 `CVE-2008-5983 <https://cve.mitre.org/cgi-"
"bin/cvename.cgi?name=CVE-2008-5983>`_。"
#: ../../c-api/init.rst:595
msgid ""
"On versions before 3.1.3, you can achieve the same effect by manually "
"popping the first :data:`sys.path` element after having called "
":c:func:`PySys_SetArgv`, for example using::"
msgstr ""
"在 3.1.3 之前的版本中,你可以通过在调用 :c:func:`PySys_SetArgv` 之后手动弹出第一个 :data:`sys.path` "
"元素,例如使用::"
#: ../../c-api/init.rst:609
msgid ""
"This function works like :c:func:`PySys_SetArgvEx` with *updatepath* set to "
"``1`` unless the :program:`python` interpreter was started with the "
":option:`-I`."
msgstr ""
"此函数相当于 :c:func:`PySys_SetArgvEx` 设置了 *updatepath* 为 ``1`` 除非 "
":program:`python` 解释器启动时附带了 :option:`-I`。"
#: ../../c-api/init.rst:616
msgid "The *updatepath* value depends on :option:`-I`."
msgstr "*updatepath* 值依赖于 :option:`-I`。"
#: ../../c-api/init.rst:621
msgid ""
"Set the default \"home\" directory, that is, the location of the standard "
"Python libraries. See :envvar:`PYTHONHOME` for the meaning of the argument "
"string."
msgstr ""
"设置默认的 \"home\" 目录,也就是标准 Python 库所在的位置。 请参阅 :envvar:`PYTHONHOME` 了解该参数字符串的含义。"
#: ../../c-api/init.rst:625
msgid ""
"The argument should point to a zero-terminated character string in static "
"storage whose contents will not change for the duration of the program's "
"execution. No code in the Python interpreter will change the contents of "
"this storage."
msgstr "此参数应当指向静态存储中一个以零值结束的字符串,其内容在程序执行期间将保持不变。 Python 解释器中的代码绝不会修改此存储中的内容。"
#: ../../c-api/init.rst:636
msgid ""
"Return the default \"home\", that is, the value set by a previous call to "
":c:func:`Py_SetPythonHome`, or the value of the :envvar:`PYTHONHOME` "
"environment variable if it is set."
msgstr ""
"返回默认的 \"home\",就是由之前对 :c:func:`Py_SetPythonHome` 的调用所设置的值,或者在设置了 "
":envvar:`PYTHONHOME` 环境变量的情况下该环境变量的值。"
#: ../../c-api/init.rst:644
msgid "Thread State and the Global Interpreter Lock"
msgstr "线程状态和全局解释器锁"
#: ../../c-api/init.rst:651
msgid ""
"The Python interpreter is not fully thread-safe. In order to support multi-"
"threaded Python programs, there's a global lock, called the :term:`global "
"interpreter lock` or :term:`GIL`, that must be held by the current thread "
"before it can safely access Python objects. Without the lock, even the "
"simplest operations could cause problems in a multi-threaded program: for "
"example, when two threads simultaneously increment the reference count of "
"the same object, the reference count could end up being incremented only "
"once instead of twice."
msgstr ""
"Python 解释器不是完全线程安全的。 为了支持多线程的 Python 程序,设置了一个全局锁,称为 :term:`global "
"interpreter lock` 或 :term:`GIL`,当前线程必须在持有它之后才能安全地访问 Python 对象。 "
"如果没有这个锁,即使最简单的操作也可能在多线程的程序中导致问题:例如,当两个线程同时增加相同对象的引用计数时,引用计数可能最终只增加了一次而不是两次。"
#: ../../c-api/init.rst:661
msgid ""
"Therefore, the rule exists that only the thread that has acquired the "
":term:`GIL` may operate on Python objects or call Python/C API functions. In"
" order to emulate concurrency of execution, the interpreter regularly tries "
"to switch threads (see :func:`sys.setswitchinterval`). The lock is also "
"released around potentially blocking I/O operations like reading or writing "
"a file, so that other Python threads can run in the meantime."
msgstr ""
"因此,规则要求只有获得 :term:`GIL` 的线程才能在 Python对象上执行操作或调用 Python/C API 函数。 "
"为了模拟并发执行,解释器会定期尝试切换线程 (参见 :func:`sys.setswitchinterval`)。 锁也会在读写文件等可能造成阻塞的 "
"I/O 操作时释放,以便其他 Python 线程可以同时运行。"
#: ../../c-api/init.rst:672
msgid ""
"The Python interpreter keeps some thread-specific bookkeeping information "
"inside a data structure called :c:type:`PyThreadState`. There's also one "
"global variable pointing to the current :c:type:`PyThreadState`: it can be "
"retrieved using :c:func:`PyThreadState_Get`."
msgstr ""
"Python 解释器会在一个名为 :c:type:`PyThreadState` 的数据结构体中保存一些线程专属的记录信息。 还有一个全局变量指向当前的"
" :c:type:`PyThreadState`: 它可以使用 :c:func:`PyThreadState_Get` 来获取。"
#: ../../c-api/init.rst:678
msgid "Releasing the GIL from extension code"
msgstr "从扩展扩展代码中释放 GIL"
#: ../../c-api/init.rst:680
msgid ""
"Most extension code manipulating the :term:`GIL` has the following simple "
"structure::"
msgstr "大多数操作 :term:`GIL` 的扩展代码具有以下简单结构:"
#: ../../c-api/init.rst:689
msgid "This is so common that a pair of macros exists to simplify it::"
msgstr "这是如此常用因此增加了一对宏来简化它::"
#: ../../c-api/init.rst:699
msgid ""
"The :c:macro:`Py_BEGIN_ALLOW_THREADS` macro opens a new block and declares a"
" hidden local variable; the :c:macro:`Py_END_ALLOW_THREADS` macro closes the"
" block."
msgstr ""
":c:macro:`Py_BEGIN_ALLOW_THREADS` "
"宏将打开一个新块并声明一个隐藏的局部变量;:c:macro:`Py_END_ALLOW_THREADS` 宏将关闭这个块。"
#: ../../c-api/init.rst:703
msgid "The block above expands to the following code::"
msgstr "上面的代码块可扩展为下面的代码::"
#: ../../c-api/init.rst:715
msgid ""
"Here is how these functions work: the global interpreter lock is used to "
"protect the pointer to the current thread state. When releasing the lock "
"and saving the thread state, the current thread state pointer must be "
"retrieved before the lock is released (since another thread could "
"immediately acquire the lock and store its own thread state in the global "
"variable). Conversely, when acquiring the lock and restoring the thread "
"state, the lock must be acquired before storing the thread state pointer."
msgstr ""
"这些函数的工作原理如下:全局解释器锁被用来保护指向当前线程状态的指针。 当释放锁并保存线程状态时,必须在锁被释放之前获取当前线程状态指针 "
"(因为另一个线程可以立即获取锁并将自己的线程状态存储到全局变量中)。 相应地,当获取锁并恢复线程状态时,必须在存储线程状态指针之前先获取锁。"
#: ../../c-api/init.rst:724
msgid ""
"Calling system I/O functions is the most common use case for releasing the "
"GIL, but it can also be useful before calling long-running computations "
"which don't need access to Python objects, such as compression or "
"cryptographic functions operating over memory buffers. For example, the "
"standard :mod:`zlib` and :mod:`hashlib` modules release the GIL when "
"compressing or hashing data."
msgstr ""
"调用系统 I/O 函数是释放 GIL 的最常见用例,但它在调用不需要访问 Python "
"对象的长期运行计算,比如针对内存缓冲区进行操作的压缩或加密函数之前也很有用。 举例来说,在对数据执行压缩或哈希操作时标准 :mod:`zlib` 和 "
":mod:`hashlib` 模块就会释放 GIL。"
#: ../../c-api/init.rst:735
msgid "Non-Python created threads"
msgstr "非Python创建的线程"