Programação  
 
Rede de conhecimento computador >> Programação >> Programação Python >> Content
Como posso utilizar com eficiência a execução do Loop em Python paralelo para otimizar a execução do meu código?
O loop integrado de Python não é inerentemente paralelo. Para executar um loop `para` em paralelo, você precisa usar bibliotecas projetadas para processamento paralelo. As abordagens mais comuns estão usando o módulo `multiprocessing` ou bibliotecas especializadas como` concorrente.futures` e `joblib '. A melhor escolha depende da natureza de suas tarefas.

Aqui está um detalhamento de como paralelizar um `para` para `loop com esses métodos, juntamente com considerações para obter eficiência ideal:

1. `multiprocessing`:

Este módulo fornece o controle mais direto sobre processos paralelos. É mais adequado quando suas iterações de loop são computacionalmente intensivas e independentes (sem dependências de memória compartilhada).

`` `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. Exemplo:
resultado =item * 2
resultado de retorno

Se __name__ =='__main__':# crucial para compatibilidade com o Windows
dados =lista (intervalo (1000)) # seus dados
com multiprocessing.pool (processos =multiprocessing.cpu_count ()) como pool:
Resultados =pool.map (process_item, dados) # Aplicar process_item a cada item em dados

Imprimir (resultados)
`` `

* `multiprocessing.pool`: Cria um conjunto de processos de trabalhador. `multiprocessing.cpu_count ()` determina o número ideal de processos com base nos núcleos da CPU do seu sistema. Ajuste esse número, se necessário (por exemplo, para hiperthreading).
* `pool.map`: Aplica a função `process_item` a cada item no` dados` iterável, distribuindo o trabalho nos processos.
* `se __name__ =='__main __':`: Isso é essencial, especialmente no Windows, para evitar a criação de processos recursiva que pode levar a falhas.

2. `concorrente.futures`:

Este módulo fornece uma interface de nível superior que o 'multiprocessamento', oferecendo paralelismo baseado em processos e baseado em threads. Os threads são geralmente mais leves, mas são limitados pelo bloqueio global de intérprete (GIL) em Cpython, tornando-os menos eficazes para tarefas ligadas à CPU.

`` `Python
importação concorrente.futures

DEF Process_item (item):
# O mesmo que antes
resultado =item * 2
resultado de retorno

se __name__ =='__main__':
dados =lista (intervalo (1000))
com concurrent.futures.processpoolExecutor () como executor:# use processpoolExecutor para tarefas ligadas à CPU
Resultados =List (Execoror.map (process_item, dados))

Imprimir (resultados)
`` `

* `processpoolExecutor`: Usa processos, adequados para operações ligadas à CPU.
* `threadpoolexecutor`: Usa threads, melhor para operações ligadas a E/O (aguardando solicitações de rede, leituras de arquivo etc.).

3. `joBlib`:

`Joblib` é uma biblioteca projetada especificamente para computação paralela no Python. É frequentemente usado em contextos de ciência de dados e aprendizado de máquina. Oferece recursos e lida com recursos convenientes automaticamente.

`` `Python
da importação de joblib paralela, atrasada

DEF Process_item (item):
# O mesmo que antes
resultado =item * 2
resultado de retorno

se __name__ =='__main__':
dados =lista (intervalo (1000))
Resultados =paralelo (n_jobs =-1) (atrasado (process_item) (item) para item em dados) # n_jobs =-1 usa todos os processadores

Imprimir (resultados)
`` `

* `parallel (n_jobs =-1)`: Executa as tarefas em paralelo usando todos os núcleos de CPU disponíveis (`-1`).
* `atrasado (process_item) (item)`: Atrasa a execução de `process_item` até que esteja agendado por` parallel '.


considerações de eficiência:

* Sobrecarga: A paralelização introduz sobrecarga. Se suas tarefas individuais forem muito rápidas, a sobrecarga poderá superar os benefícios. Experimente para encontrar o equilíbrio ideal.
* Transferência de dados: A passagem dos dados entre os processos pode ser lenta. Minimize a quantidade de dados transferidos, se possível.
* Dependências: Se suas iterações de loop dependerem uma da outra (por exemplo, a saída de uma iteração é a entrada para a próxima), a paralelização se tornará muito mais complexa e pode não ser viável.
* Recursos compartilhados: Evite acessar recursos compartilhados (arquivos, bancos de dados) de vários processos simultaneamente sem mecanismos adequados de sincronização (bloqueios, semáforos), pois isso pode levar a condições de corrida e corrupção de dados.
* Número de processos: O número ideal de processos é tipicamente próximo do número de núcleos da CPU, mas pode variar com base na carga e no sistema. A experimentação é fundamental.


Lembre -se de perfilar seu código para identificar gargalos e medir a melhoria do desempenho alcançada através da paralelização. Somente paralleize partes do seu código que contribuem significativamente para o tempo de execução geral. A paralelização inadequada pode realmente * reduzir * o desempenho.

Anterior :

Próximo :
  Os artigos relacionados
·O que são arquivos PYC 
·Como converter uma tupla de uma lista em Python 
·Como ler a Seleção Listbox em Python 
·Como separar um int em um Array 
·Como publicar páginas da Web com Python 
·O que é o Python 2.5 
·Como fazer matriz 3D em Python 
·Como atualizar do Python 2,5-2,6 
·Como listar todos os módulos Python instalados no Linu…
·Como criar uma instrução IF em Python 
  Artigos em destaque
·Como escrever um programa de imposto sobre vendas em Ja…
·Qual é a linguagem de programação do Windows 7? 
·O Que Esperar um Fim de Expressão média em VB 
·Joomla MySQL Tutorial 
·Lona Python Métodos 
·Como começar a utilizar o VBA com o Microsoft Word 
·Como fazer uma pesquisa do Windows em VB 
·Como fazer um programa Infinite Loop em Basic 
·Como conectar um MDB 
·Visual Basic. NET vs. . Visual C # NET 
Cop e direita © Rede de conhecimento computador https://ptcomputador.com Todos os Direitos Reservados