@@ -27,7 +27,7 @@ msgstr ""
27
27
28
28
#: ../../howto/isolating-extensions.rst:7
29
29
msgid "Isolating Extension Modules"
30
- msgstr "Isolando Módulos de Extensão "
30
+ msgstr "Isolando módulos de extensão "
31
31
32
32
#: ../../howto/isolating-extensions.rst-1
33
33
msgid "Abstract"
@@ -228,7 +228,7 @@ msgstr ""
228
228
"objeto de módulo, não devem ser compartilhados com outros objetos de módulo, "
229
229
"e devem ser limpados quando o objeto de módulo for desalocado. Uma vez que "
230
230
"esta é somente uma regra geral, exceções são possíveis (veja `Gerenciando "
231
- "Estado Global `_), mas elas necessitam mais cuidado e atenção a casos "
231
+ "estado global `_), mas elas necessitam mais cuidado e atenção a casos "
232
232
"especiais."
233
233
234
234
#: ../../howto/isolating-extensions.rst:111
@@ -254,42 +254,58 @@ msgid ""
254
254
"``binascii.Error`` are separate objects. In the following code, the "
255
255
"exception is *not* caught:"
256
256
msgstr ""
257
+ "Note que módulos isolados criam alguns casos particulares que podem acabar "
258
+ "surpreendendo. O mais notável é que, tipicamente, cada objeto de módulo não "
259
+ "vai compartilhar as suas classes e exceções com outros módulos similares. "
260
+ "Continuando o `exemplo acima <Objetos de módulo isolados_>`__, note "
261
+ "``old_binascii.Error`` e ``binascii.Error`` são objetos separados. No código "
262
+ "a seguir, a exceção *não* é capturada:"
257
263
258
264
#: ../../howto/isolating-extensions.rst:139
259
265
msgid ""
260
266
"This is expected. Notice that pure-Python modules behave the same way: it is "
261
267
"a part of how Python works."
262
268
msgstr ""
269
+ "Isso é esperado. Repare que módulos Python-puro se comportam do mesmo jeito: "
270
+ "isso é parte de como o Python funciona."
263
271
264
272
#: ../../howto/isolating-extensions.rst:142
265
273
msgid ""
266
274
"The goal is to make extension modules safe at the C level, not to make hacks "
267
275
"behave intuitively. Mutating ``sys.modules`` \" manually\" counts as a hack."
268
276
msgstr ""
277
+ "O objetivo é fazer módulos de extensão seguros no nível do C, e não fazer "
278
+ "gambiarras se comportarem de forma intuitiva. Modificar o ``sys.modules`` "
279
+ "\" manualmente\" conta como uma gambiarra."
269
280
270
281
#: ../../howto/isolating-extensions.rst:148
271
282
msgid "Making Modules Safe with Multiple Interpreters"
272
- msgstr ""
283
+ msgstr "Fazendo módulos seguros com múltiplos interpretadores "
273
284
274
285
#: ../../howto/isolating-extensions.rst:152
275
286
msgid "Managing Global State"
276
- msgstr "Gerenciando Estado Global "
287
+ msgstr "Gerenciando estado global "
277
288
278
289
#: ../../howto/isolating-extensions.rst:154
279
290
msgid ""
280
291
"Sometimes, the state associated with a Python module is not specific to that "
281
292
"module, but to the entire process (or something else \" more global\" than a "
282
293
"module). For example:"
283
294
msgstr ""
295
+ "Às vezes, o estado associado a um módulo Python não é específico àquele "
296
+ "módulo, mas ao processo inteiro (ou a alguma outra coisa \" mais global\" que "
297
+ "um módulo). Por exemplo:"
284
298
285
299
#: ../../howto/isolating-extensions.rst:158
286
300
msgid "The ``readline`` module manages *the* terminal."
287
- msgstr ""
301
+ msgstr "O módulo ``readline`` gerencia *o* terminal. "
288
302
289
303
#: ../../howto/isolating-extensions.rst:159
290
304
msgid ""
291
305
"A module running on a circuit board wants to control *the* on-board LED."
292
306
msgstr ""
307
+ "Um módulo executando em uma placa de circuito quer controlar *o* componente "
308
+ "LED."
293
309
294
310
#: ../../howto/isolating-extensions.rst:162
295
311
msgid ""
@@ -299,6 +315,11 @@ msgid ""
299
315
"whether for Python or other languages). If that is not possible, consider "
300
316
"explicit locking."
301
317
msgstr ""
318
+ "Nestes casos, o módulo Python deve prover *acesso* ao estado global, ao "
319
+ "invés de *possuí-lo*. Se possível, escreva o módulo de forma que múltiplas "
320
+ "cópias dele possam acessar o estado independentemente (junto com outras "
321
+ "bibliotecas, sejam elas do Python ou de outras linguagens). Se isso não for "
322
+ "possível, considere usar travas explícitas."
302
323
303
324
#: ../../howto/isolating-extensions.rst:168
304
325
msgid ""
@@ -307,17 +328,24 @@ msgid ""
307
328
"being loaded more than once per process—see `Opt-Out: Limiting to One Module "
308
329
"Object per Process`_."
309
330
msgstr ""
331
+ "Se for necessário usar estado global para o processo, o jeito mais simples "
332
+ "de evitar problemas com múltiplos interpretadores é prevenir explicitamente "
333
+ "que o módulo seja carregado mais de uma vez por processo—veja `Exclusão "
334
+ "voluntária: limitando a um objeto de módulo por processo`_."
310
335
311
336
#: ../../howto/isolating-extensions.rst:175
312
337
msgid "Managing Per-Module State"
313
- msgstr ""
338
+ msgstr "Gerenciando estado por módulo "
314
339
315
340
#: ../../howto/isolating-extensions.rst:177
316
341
msgid ""
317
342
"To use per-module state, use :ref:`multi-phase extension module "
318
343
"initialization <multi-phase-initialization>`. This signals that your module "
319
344
"supports multiple interpreters correctly."
320
345
msgstr ""
346
+ "Para usar estado por módulo, use :ref:`inicialização multifásica de módulos "
347
+ "de extensão <multi-phase-initialization>`. Assim, você sinaliza que o seu "
348
+ "módulo suporta múltiplos interpretadores corretamente."
321
349
322
350
#: ../../howto/isolating-extensions.rst:181
323
351
msgid ""
@@ -329,6 +357,13 @@ msgid ""
329
357
"``csv``'s :py:data:`~csv.field_size_limit`) which the C code needs to "
330
358
"function."
331
359
msgstr ""
360
+ "Defina ``PyModuleDef.m_size`` como um número positivo *N* para requerer *N* "
361
+ "bytes de armazenamento local para o módulo. Geralmente, *N* será o tamanho "
362
+ "de alguma ``struct`` específica para o módulo, a qual pode guardar todo o "
363
+ "estado a nível de C do módulo. Em particular, é nela que você deve colocar "
364
+ "ponteiros para classes (incluindo exceções, mas excluindo tipos estáticos) e "
365
+ "configurações (por exemplo, :py:data:`~csv.field_size_limit` no módulo "
366
+ "``csv``) que o código C precisa para funcionar."
332
367
333
368
#: ../../howto/isolating-extensions.rst:190
334
369
msgid ""
@@ -337,12 +372,19 @@ msgid ""
337
372
"means error- and type-checking at the C level, which is easy to get wrong "
338
373
"and hard to test sufficiently."
339
374
msgstr ""
375
+ "Outra opção é guardar estado no ``__dict__`` do módulo, mas você deve evitar "
376
+ "quebrar quando usuários modificarem o ``__dict__`` a partir do código "
377
+ "Python. Isso geralmente significa verificar tipos e erros no nível do C, o "
378
+ "que é fácil de ser feito incorretamente e difícil de se testar "
379
+ "suficientemente."
340
380
341
381
#: ../../howto/isolating-extensions.rst:195
342
382
msgid ""
343
383
"However, if module state is not needed in C code, storing it in ``__dict__`` "
344
384
"only is a good idea."
345
385
msgstr ""
386
+ "Entretanto, se o estado do módulo não for necessário para o código C, guardá-"
387
+ "lo somente no ``__dict__`` é uma boa ideia."
346
388
347
389
#: ../../howto/isolating-extensions.rst:198
348
390
msgid ""
@@ -353,17 +395,26 @@ msgid ""
353
395
"and make the code longer; this is the price for modules which can be "
354
396
"unloaded cleanly."
355
397
msgstr ""
398
+ "Se o estado do módulo inclui ponteiros para ``PyObject``, o objeto de módulo "
399
+ "deve conter referências a tais objetos e implementar os ganchos a nível de "
400
+ "módulo ``m_traverse``, ``m_clear`` e ``m_free``. Eles funcionam como os "
401
+ "``tp_traverse``, ``tp_clear`` e ``tp_free`` de uma classe. Adicioná-los "
402
+ "requer algum trabalho e torna o código mais longo; é o preço de módulos que "
403
+ "podem ser descarregados de forma limpa."
356
404
357
405
#: ../../howto/isolating-extensions.rst:205
358
406
msgid ""
359
407
"An example of a module with per-module state is currently available as "
360
408
"`xxlimited <https://github.com/python/cpython/blob/master/Modules/xxlimited."
361
409
"c>`__; example module initialization shown at the bottom of the file."
362
410
msgstr ""
411
+ "Um exemplo de módulo com estado por módulo está disponível atualmente como "
412
+ "``xxlimited <https://github.com/python/cpython/blob/master/Modules/xxlimited."
413
+ "c>`__; há um exemplo de inicialização do módulo no final do arquivo."
363
414
364
415
#: ../../howto/isolating-extensions.rst:211
365
416
msgid "Opt-Out: Limiting to One Module Object per Process"
366
- msgstr ""
417
+ msgstr "Exclusão voluntária: limitando a um objeto de módulo por processo "
367
418
368
419
#: ../../howto/isolating-extensions.rst:213
369
420
msgid ""
@@ -372,35 +423,49 @@ msgid ""
372
423
"module, you can explicitly make your module loadable only once per process. "
373
424
"For example::"
374
425
msgstr ""
426
+ "Um ``PyModuleDef.m_size`` não-negativo sinaliza que um módulo admite "
427
+ "múltiplos interpretadores corretamente. Se este ainda não é o caso para o "
428
+ "seu módulo, you pode explicitamente torná-lo carregável somente uma vez por "
429
+ "processo. Por exemplo::"
375
430
376
431
#: ../../howto/isolating-extensions.rst:234
377
432
msgid "Module State Access from Functions"
378
- msgstr ""
433
+ msgstr "Acesso ao estado de módulo a partir de funções "
379
434
380
435
#: ../../howto/isolating-extensions.rst:236
381
436
msgid ""
382
437
"Accessing the state from module-level functions is straightforward. "
383
438
"Functions get the module object as their first argument; for extracting the "
384
439
"state, you can use ``PyModule_GetState``::"
385
440
msgstr ""
441
+ "É trivial acessar o estado a partir de funções a nível do módulo. Funções "
442
+ "recebem o objeto de módulo como o primeiro argumento; para extrair o estado, "
443
+ "você pode usar ``PyModule_GetState``::"
386
444
387
445
#: ../../howto/isolating-extensions.rst:251
388
446
msgid ""
389
447
"``PyModule_GetState`` may return ``NULL`` without setting an exception if "
390
448
"there is no module state, i.e. ``PyModuleDef.m_size`` was zero. In your own "
391
449
"module, you're in control of ``m_size``, so this is easy to prevent."
392
450
msgstr ""
451
+ "``PyModule_GetState`` pode retornar ``NULL`` sem definir uma exceção se não "
452
+ "houver estado de módulo, ou seja se ``PyModuleDef.m_size`` for zero. No seu "
453
+ "próprio módulo, você controla o ``m_size``, de forma que isso é fácil de "
454
+ "prevenir."
393
455
394
456
#: ../../howto/isolating-extensions.rst:258
395
457
msgid "Heap Types"
396
- msgstr ""
458
+ msgstr "Tipos no heap "
397
459
398
460
#: ../../howto/isolating-extensions.rst:260
399
461
msgid ""
400
462
"Traditionally, types defined in C code are *static*; that is, ``static "
401
463
"PyTypeObject`` structures defined directly in code and initialized using "
402
464
"``PyType_Ready()``."
403
465
msgstr ""
466
+ "Tradicionalmente, tipos definidos em C são *estáticos*; isto é, estruturas "
467
+ "``static PyTypeObject`` definidas diretamente em código e inicializadas "
468
+ "usando ``PyType_Ready()``."
404
469
405
470
#: ../../howto/isolating-extensions.rst:264
406
471
msgid ""
@@ -409,6 +474,11 @@ msgid ""
409
474
"limit the possible issues, static types are immutable at the Python level: "
410
475
"for example, you can't set ``str.myattribute = 123``."
411
476
msgstr ""
477
+ "Tais tipos são necessariamente compartilhados pelo processo inteiro. "
478
+ "Compartilhá-los entre objetos de módulo requer atenção a qualquer estado que "
479
+ "eles possuam ou acessem. Para limitar potenciais problemas, tipos estáticos "
480
+ "são imutáveis a nível do Python: por exemplo, você não pode atribuir ``str."
481
+ "meuatributo = 123``."
412
482
413
483
#: ../../howto/isolating-extensions.rst:270
414
484
msgid ""
@@ -419,6 +489,13 @@ msgid ""
419
489
"Python objects across interpreters implicitly depends on CPython's current, "
420
490
"process-wide GIL."
421
491
msgstr ""
492
+ "Não há problema em compartilhar objetos verdadeiramente imutáveis entre "
493
+ "interpretadores, desde que através deles não seja possível acessar outros "
494
+ "objetos mutáveis. Entretanto, no CPython, todo objeto Python tem um detalhe "
495
+ "de implementação mutável: o contador de referências. Mudanças no refcount "
496
+ "são protegidas pelo GIL. Logo, todo código que compartilha um objeto Python "
497
+ "entre interpretadores depende implicitamente do GIL (que é global a nível de "
498
+ "processo)."
422
499
423
500
#: ../../howto/isolating-extensions.rst:277
424
501
msgid ""
0 commit comments