You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
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,
691
692
e o padrão comum de usar filas para distribuir tarefas e coletar resultados.
692
693
O <<ch_executors>> apresenta uma forma mais simples de distribuir tarefas para processos:
693
694
um `ProcessPoolExecutor` do pacote `concurrent.futures`, que internamente usa filas.
695
+
694
696
====
695
697
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^ – 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.
698
700
699
701
O((("sequential.py program"))) programa _sequential.py_ fornece a linha base de desempenho.
<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.
876
878
<2> `jobs` e `results` são as filas descritas no <<ex_primes_procs_top>>.
877
879
<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 `⑥`.
879
881
<5> Mostra quantos números foram checados e o tempo total decorrido.
880
882
<6> Os argumentos são o número de `procs` e a fila para armazenar os resultados.
881
883
<7> Percorre o loop até que todos os processos terminem.
@@ -1056,7 +1058,7 @@ ____
1056
1058
1057
1059
Vemos muitas equipes se metendo em apuros por escolher ferramentas, frameworks ou arquiteturas complexas, porque eles "talvez precisem de escalabilidade".
1058
1060
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_—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_].]
1060
1062
____
1061
1063
1062
1064
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
1249
1251
A vasta documentação oficial de `multiprocessing` inclui conselhos úteis em sua seção
1250
1252
https://docs.python.org/pt-br/3/library/multiprocessing.html#programming-guidelines["Programming guidelines" (_Diretrizes de programação_)] (EN).
1251
1253
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_]—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.
1253
1255
1254
1256
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.
1255
1257
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.
Copy file name to clipboardExpand all lines: online/cap24.adoc
+3-4Lines changed: 3 additions & 4 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -225,15 +225,14 @@ Poderíamos ter dado qualquer outro nome ao atributo de classe `+__slots__+`, ma
225
225
226
226
[WARNING]
227
227
====
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".
230
229
====
231
230
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")))
233
232
234
233
235
234
[[enhancing_with_init_subclass_sec]]
236
-
=== Apresentando pass:[__init_subclass__]
235
+
=== Apresentando `+__init_subclass__+`
237
236
238
237
Tanto((("class metaprogramming", "__init_subclass__", id="CMinitsub24", secondary-sortas="init")))((("__init_subclass__", id="initsub24"))) `+__init_subclass__+` quanto `+__set_name__+` foram propostos na
239
238
https://fpy.li/pep487[PEP 487—Simpler customization of class creation (_PEP 487—Uma customização mais simples da criação de classes_)].
0 commit comments