Programação  
 
Rede de conhecimento computador >> Programação >> Programação Python >> Content
Como o processamento paralelo pode ser implementado no Python usando um loop para loop?
Você não pode paralelizar diretamente um loop padrão `for`t em python usando apenas o construto de loop` para `para` para '. O bloqueio de intérprete global (GIL) da Python impede que vários threads executem bytecodes python simultaneamente em um único processo. Isso significa que o verdadeiro paralelismo para tarefas ligadas à CPU dentro de um loop `for` é impossível apenas apenas com o encadeamento.

No entanto, você pode obter o paralelismo usando o multiprocessamento, o que ignora o GIL criando vários processos. Veja como você pode implementar o processamento paralelo em Python usando um `para` loop e a biblioteca` multiprocessing`:

Método 1:usando `multiprocessing.pool.map` (mais simples para muitas operações idênticas)

Essa é a abordagem mais fácil se cada iteração do seu loop executar a mesma operação em dados diferentes. `Pool.map` distribui com eficiência o trabalho em vários processos.

`` `Python
importar multiprocessamento

DEF Process_item (item):
"" "A função a ser executada em paralelo para cada item." ""
# Seu código para processar um único item vai aqui
# ... algum cálculo ...
Resultado de retorno # retornar o resultado do cálculo

Se __name__ =='__main__':# importante para a compatibilidade do Windows
dados =[1, 2, 3, 4, 5, 6, 7, 8, 9, 10] # seus dados

com multiprocessing.pool (processos =multiprocessing.cpu_count ()) como pool:
Resultados =pool.map (process_item, dados)

Imprimir (resultados)
`` `

Este código cria um pool de processos trabalhadores (igual ao número de núcleos da CPU por padrão). `pool.map` aplica` process_item` a cada elemento em `dados` simultaneamente e retorna uma lista dos resultados na mesma ordem que a entrada.


Método 2:usando `multiprocessing.pool.apply_async` (para cenários mais complexos ou operações assíncronas)

Se o seu loop envolver operações lógicas ou assíncronas mais complexas, `APPL_ASYNC` oferece mais controle.

`` `Python
importar multiprocessamento

DEF Process_item (item):
# ... seu código ...
resultado de retorno

se __name__ =='__main__':
dados =[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
Resultados =[]
com multiprocessing.pool (processos =multiprocessing.cpu_count ()) como pool:
# Appl_async retorna um objeto assíncrono
async_results =[pool.apply_async (process_item, (item)) para item em dados]
# Obtenha os resultados (bloqueando até que todos os processos sejam concluídos)
para async_result em async_results:
Results.append (async_result.get ()))

Imprimir (resultados)
`` `

`Appl_async` permite que você envie tarefas individualmente e recupere os resultados posteriormente. Isso é útil se o tempo de processamento para cada item variar significativamente.


Considerações importantes:

* `se __name__ =='__main __':`: Isso é crucial, especialmente nas janelas, para evitar a criação de processos recursivos.
* compartilhamento de dados: Evite compartilhar dados mutáveis ​​diretamente entre os processos. Use técnicas como filas ou tubos para comunicação entre processos para evitar condições de raça.
* Sobrecarga: Criar e gerenciar processos tem sobrecarga. O processamento paralelo é mais benéfico para tarefas intensivas em computação, onde o tempo de processamento supera significativamente a sobrecarga.
* Número de processos: O número ideal de processos geralmente é igual ao número de núcleos da CPU, mas pode ser necessária experimentação.


Lembre -se de substituir `# ... seu código ...` pelo seu cálculo real. Escolha o método que melhor se adapte à estrutura e complexidade de suas operações de `para` loop. Para operações simples e paralelas, `pool.map` geralmente é a abordagem preferida e mais eficiente.

Anterior :

Próximo :
  Os artigos relacionados
·O Python precisa de um adaptador 
·Exemplos Python CGI 
·Como Construir um dicionário em Python 
·Como posso implementar com eficiência uma matriz circu…
·Como separar uma vírgula de uma string 
·Como Transpor uma lista de listas em Python 
·Como depurar Python 
·Como encontrar a mais longa seqüência da entrada em P…
·Como testar em Python Se um objeto está em uma classe 
·Como dividir Cada seqüência de letras em Python 
  Artigos em destaque
·Como configurar Bytes para receber dados numéricos usa…
·Java GUI Tutorial para NetBeans 
·Como usar o SSL com PHP 
·O que é uma referência VB.NET 
·Exemplos de Projetos do Visual Basic 
·Como usar Python Script 
·Tipos de código para CC em Java 
·Como adicionar JAVA_HOME 
·Como fazer grade Formas 
·Como usar a Declaração de Rubi Caso no Controlador Ra…
Cop e direita © Rede de conhecimento computador https://ptcomputador.com Todos os Direitos Reservados