Skip to content

Commit 183fb2c

Browse files
committed
vol3: começando
1 parent a5613df commit 183fb2c

File tree

7 files changed

+366
-119
lines changed

7 files changed

+366
-119
lines changed

online/cap17.adoc

Lines changed: 233 additions & 109 deletions
Large diffs are not rendered by default.

online/cap19.adoc

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -686,15 +686,17 @@ Até aqui experimentamos com uma única chamada para uma função de uso intensi
686686

687687
[NOTE]
688688
====
689+
689690
Escrevi((("concurrency models", "process pools", id="CMprocess19")))((("process pools", "example problem")))
690-
essa seção para mostrar o uso de múltiplos processos em cenários de uso intensivo de CPU,
691+
esta seção para mostrar o uso de múltiplos processos em cenários de uso intensivo de CPU,
691692
e o padrão comum de usar filas para distribuir tarefas e coletar resultados.
692693
O <<ch_executors>> apresenta uma forma mais simples de distribuir tarefas para processos:
693694
um `ProcessPoolExecutor` do pacote `concurrent.futures`, que internamente usa filas.
695+
694696
====
695697

696-
Nessa seção vamos escrever programas para checar se os números dentro de uma amostra de 20 inteiros são primos. Os números variam de 2 até 9.999.999.999.999.999—isto é, 10^16^ &ndash; 1, ou mais de 2^53^.
697-
A amostra inclui números primos pequenos e grandes, bem como números compostos com fatores primos grandes e pequenos.
698+
Nessa seção vamos escrever programas para checar se os números dentro de uma amostra de 20 inteiros são primos. Os números variam de 2 até 9.999.999.999.999.999—isto é, 10^16^ - 1, ou mais de 2^53^.
699+
A amostra inclui números primos pequenos e grandes, bem como números compostos com fatores primos pequenos e grandes.
698700

699701
O((("sequential.py program"))) programa _sequential.py_ fornece a linha base de desempenho.
700702
Aqui está o resultado de uma execução de teste:
@@ -875,7 +877,7 @@ include::../code/19-concurrency/primes/procs.py[tags=PRIMES_PROC_MAIN]
875877
<1> Se nenhum argumento é dado na linha de comando, define o número de processos como o número de núcleos na CPU; caso contrário, cria quantos processos forem passados no primeiro argumento.
876878
<2> `jobs` e `results` são as filas descritas no <<ex_primes_procs_top>>.
877879
<3> Inicia `proc` processos para consumir `jobs` e informar `results`.
878-
<4> Recupera e exibe os resultados; `report` está definido em pass:[<img src="callouts/6.png" alt="6"/>].
880+
<4> Recupera e exibe os resultados; `report` está definido em `⑥`.
879881
<5> Mostra quantos números foram checados e o tempo total decorrido.
880882
<6> Os argumentos são o número de `procs` e a fila para armazenar os resultados.
881883
<7> Percorre o loop até que todos os processos terminem.
@@ -1056,7 +1058,7 @@ ____
10561058
10571059
Vemos muitas equipes se metendo em apuros por escolher ferramentas, frameworks ou arquiteturas complexas, porque eles "talvez precisem de escalabilidade".
10581060
Empresas como o Twitter e a Netflix precisam aguentar cargas extremas, então precisam dessas arquiteturas, mas elas também tem equipes de desenvolvimento extremamente habilitadas, capazes de lidar com a complexidade.
1059-
A maioria das situações não exige essas façanhas de engenharia; as equipes devem manter sua _inveja da escalabilidade na web_ sob controle, e preferir soluções simples que ainda assim fazem o que precisa ser feito.footnote:[Fonte: Thoughtworks Technology Advisory Board, https://fpy.li/19-40[_Technology Radar_&mdash;November 2015] (EN).]
1061+
A maioria das situações não exige essas façanhas de engenharia; as equipes devem manter sua _inveja da escalabilidade na web_ sob controle, e preferir soluções simples que ainda assim fazem o que precisa ser feito.footnote:[Fonte: Thoughtworks Technology Advisory Board, https://fpy.li/19-40[_Technology Radar—November 2015_].]
10601062
____
10611063

10621064
Na _escala da web_, a chave é uma arquitetura que permita escalabilidade horizontal.
@@ -1249,7 +1251,7 @@ _Python Essential Reference_, 4th ed. (Addison-Wesley), de David Beazley, e _Pyt
12491251
A vasta documentação oficial de `multiprocessing` inclui conselhos úteis em sua seção
12501252
https://docs.python.org/pt-br/3/library/multiprocessing.html#programming-guidelines["Programming guidelines" (_Diretrizes de programação_)] (EN).
12511253

1252-
Jesse Noller e Richard Oudkerk contribuíram para o pacote `multiprocessing`, introduzido na https://fpy.li/pep371[PEP 371--Addition of the multiprocessing package to the standard library] (EN). A documentação oficial do pacote é um https://docs.python.org/pt-br/3/library/multiprocessing.html[arquivo de 93 KB _.rst_]&mdash;são cerca de 63 páginas—tornando-o um dos capítulos mais longos da biblioteca padrão de Python.
1254+
Jesse Noller e Richard Oudkerk contribuíram para o pacote `multiprocessing`, introduzido na https://fpy.li/pep371[PEP 371--Addition of the multiprocessing package to the standard library] (EN). A documentação oficial do pacote é um https://docs.python.org/pt-br/3/library/multiprocessing.html[arquivo _.rst_] de 93 KB (cerca de 63 páginas), um dos capítulos mais longos da biblioteca padrão de Python.
12531255

12541256
Em pass:[<a href="https://fpy.li/19-56" class="orm:hideurl"><em>High Performance Python</em>, 2nd ed.,</a>] (O'Reilly), os autores Micha Gorelick e Ian Ozsvald incluem um capítulo sobre `multiprocessing` com um exemplo sobre checagem de números primos usando uma estratégia diferente do nosso exemplo _procs.py_. Para cada número, eles dividem a faixa de fatores possíveis-de 2 a `sqrt(n)`—em subfaixas, e fazem cada unidade de execução iterar sobre uma das subfaixas.
12551257
Sua abordagem de dividir para conquistar é típica de aplicações de computação científica, onde os conjuntos de dados são enormes, e as estações de trabalho (ou clusters) tem mais núcleos de CPU que usuários.

online/cap24.adoc

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -225,15 +225,14 @@ Poderíamos ter dado qualquer outro nome ao atributo de classe `+__slots__+`, ma
225225

226226
[WARNING]
227227
====
228-
Instâncias de classes criadas por `record_factory` não são serializáveis--isto é, elas não podem ser exportadas com a função `dump` do módulo `pickle`. Resolver este problema está além do escopo desse exemplo, que tem por objetivo mostrar a classe `type` funcionando em um caso de uso simples. Para uma solução completa, estude o código-fonte de pass:[<a href="https://fpy.li/24-4"><span class=
229-
"keep-together"><code>collections.namedtuple</code></span></a>]; procure pela palavra "pickling".
228+
Instâncias de classes criadas por `record_factory` não são serializáveis--isto é, elas não podem ser exportadas com a função `dump` do módulo `pickle`. Resolver este problema está além do escopo deste exemplo, que tem por objetivo mostrar a classe `type` funcionando em um caso de uso simples. Para uma solução completa, estude o código-fonte de `collections.namedtuple`; procure pela palavra "pickling".
230229
====
231230

232-
Vamos ver agora como emular fábricas de classes mais modernas, como `typing.NamedTuple`, que recebe uma classe definida pelo usuário, escrita com o comando `class`, e a melhora automaticamente, acrescentando funcionalidade.((("", startref="CMfacfun24")))
231+
Vamos ver agora como emular fábricas de classes mais modernas, como `typing.NamedTuple`, que recebe uma classe definida pelo usuário, escrita com a instrução `class`, e a melhora automaticamente, acrescentando funcionalidade.((("", startref="CMfacfun24")))
233232

234233

235234
[[enhancing_with_init_subclass_sec]]
236-
=== Apresentando pass:[__init_subclass__]
235+
=== Apresentando `+__init_subclass__+`
237236

238237
Tanto((("class metaprogramming", "&#x005F;&#x005F;init_subclass&#x005F;&#x005F;", id="CMinitsub24", secondary-sortas="init")))((("&#x005F;&#x005F;init&#x005F;subclass&#x005F;&#x005F;", id="initsub24"))) `+__init_subclass__+` quanto `+__set_name__+` foram propostos na
239238
https://fpy.li/pep487[PEP 487—Simpler customization of class creation (_PEP 487—Uma customização mais simples da criação de classes_)].

print/README.md

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,19 @@
11
# Procedimentos para preparar volumes para impressão
22

3+
## Rever ISBN na página de copyright e na contra-capa
4+
5+
Python Fluente, 2ª edição...
6+
7+
|volume| variante | ISBN |
8+
|------|-----------|-------------------|
9+
| 1 | standard | 978-65-988962-1-8 |
10+
| | dunder | 978-65-988962-0-1 |
11+
| 2 | standard | 978-65-989778-3-2 |
12+
| | dunder | 978-65-989778-2-5 |
13+
| 3 | standard | 978-65-989778-1-8 |
14+
| | dunder | 978-65-989778-6-3 |
15+
16+
317
## Formatação dos links
418

519
Renderize este markdown para ver a *aparência* dos links.

vol3/Copyright-cor.adoc

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
[colophon%discrete%notitle%nonfacing,toclevels=0]
2+
= Copyright
3+
:isbn-cor: XXXX
4+
:isbn-pb: XXXX
5+
6+
Tradução autorizada em português de
7+
_Fluent Python, 2nd Edition_ +
8+
ISBN 978-1-492-05635-5
9+
© 2022 Luciano Ramalho. +
10+
Esta tradução é publicada e vendida com a permissão da O'Reilly Media, Inc.,
11+
detentora dos direitos para publicação e venda desta obra.
12+
13+
© 2025 Luciano Ramalho. +
14+
_Python Fluente, 2ª edição_ está publicado sob a licença
15+
CC BY-NC-ND 4.0 +
16+
_Atribuição-NãoComercial-SemDerivações 4.0 Internacional_ [.small]#&#91;fpy.li/ccby&#93;#. +
17+
O autor mantém uma versão online em https://PythonFluente.com.
18+
19+
Autor: Luciano Ramalho +
20+
Título: Python Fluente, 2ª edição, volume 3: controle e metaprogramação +
21+
Primeira edição: 2015 +
22+
Edição atual: setembro/2025 +
23+
{revisao}ª revisão: `pyfl-vol2-rev{revisao}-cor.pdf`
24+
25+
Tradução da 2ª edição: Paulo Candido de Oliveira Filho +
26+
Ilustração de capa: Thiago Castor (xilogravura "Calango") +
27+
Design da capa: Luciano Ramalho, Zander Catta Preta @ Z•Edições +
28+
Design do miolo: Luciano Ramalho, com Asciidoctor +
29+
Ficha catalográfica: Edison Luís dos Santos
30+
31+
Publisher: Heinar Maracy @ Z•Edições
32+
33+
----
34+
R135p Ramalho, Luciano.
35+
36+
Python Fluente, 2a edição, volume 3: controle e metaprogramação /
37+
Luciano Ramalho - São Paulo, SP - Z.Edições, 2025.
38+
400 f.; il.; cor; 17 cm × 24 cm
39+
40+
ISBN: XXX-XX-XXXXXX-X-X
41+
1.Informática. 2.Linguagem de Programação. 3.Python.
42+
4.Metaprogramação.
43+
44+
I.Título II.Dados e funções III.RAMALHO, Luciano.
45+
46+
CDU: 004.438
47+
CDD: 005.133
48+
----

vol3/README.md

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
# Python Fluente, 2ª ed, volume 3
2+
3+
## Progresso
4+
5+
Faço as primeiras tarefas nos arquivos `/online/cap??.adoc`.
6+
7+
Depois copio cada arquivo para `/vol3/cap??.adoc`
8+
e faço as demais tarefas nestas cópias especiais para impressão.
9+
10+
| 17| 18| 19| 20| 21| 22| 23| 24| local | tarefa |
11+
|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|-------|-------|
12+
| | | | | | | | |`/online`|encurtar links externos|
13+
| | | | | | | | |`/online`|revisar estilo|
14+
| | | | | | | | |`/online`|revisar ortografia e gramática|
15+
| | | | | | | | |`/vol3`| refazer referências entre volumes|
16+
| | | | | | | | |`/vol3`| encurtar links entre volumes |
17+
| | | | | | | | |`/vol3`| exibir capítulo alvo em xrefs para exemplos de outros capítulos |
18+
| | | | | | | | |`/vol3`| rever paginação |
19+

vol3/vol3-cor.adoc

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
= Python Fluente, 2ª edição: volume 3&#58; Controle e Metaprogramação
2+
:doctype: book
3+
:media: prepress
4+
:hide-uri-scheme:
5+
:pdf-page-size: [17cm, 24cm]
6+
:source-highlighter: rouge
7+
:rouge-style: github
8+
:author: Luciano Ramalho
9+
:lang: pt_BR
10+
:language: asciidoctor
11+
:xrefstyle: short
12+
:sectnums:
13+
:sectnumlevels: 4
14+
:sectlinks:
15+
:data-uri:
16+
:toclevels: 2
17+
:toc: macro
18+
:!chapter-signifier:
19+
include::../print/attrib-print-pt-br.adoc[]
20+
:chapter-number: 16
21+
:revisao: 10
22+
23+
include::Copyright-cor.adoc[]
24+
25+
[dedication%notitle%discrete,toclevels=0]
26+
= Dedicatória
27+
__Para Marta, com todo o meu amor.__
28+
29+
toc::[]
30+
31+
= Parte IV: Classes e protocolos
32+
:sectnums:
33+
34+
include::../online/cap17.adoc[]
35+
include::../online/cap18.adoc[]
36+
include::../online/cap19.adoc[]
37+
include::../online/cap20.adoc[]
38+
include::../online/cap21.adoc[]
39+
include::../online/cap22.adoc[]
40+
include::../online/cap23.adoc[]
41+
include::../online/cap24.adoc[]

0 commit comments

Comments
 (0)