https://github.com/renatoelho/python-paralelismo
O paralelismo no Python é uma técnica que permite a execução de várias tarefas simultaneamente, aumentando a eficiência e a velocidade de processamento.
https://github.com/renatoelho/python-paralelismo
joblib paralell python python3 threads
Last synced: 7 months ago
JSON representation
O paralelismo no Python é uma técnica que permite a execução de várias tarefas simultaneamente, aumentando a eficiência e a velocidade de processamento.
- Host: GitHub
- URL: https://github.com/renatoelho/python-paralelismo
- Owner: Renatoelho
- License: mit
- Created: 2024-03-04T07:43:20.000Z (over 1 year ago)
- Default Branch: main
- Last Pushed: 2024-03-24T00:58:25.000Z (over 1 year ago)
- Last Synced: 2025-01-25T15:09:39.228Z (8 months ago)
- Topics: joblib, paralell, python, python3, threads
- Language: Python
- Homepage: https://youtu.be/C8B8ZLvHUWs
- Size: 253 KB
- Stars: 2
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Paralelismo no Python
O paralelismo no Python é uma técnica que permite a execução de várias tarefas ***simultaneamente***, aumentando a eficiência e a velocidade de processamento. Tarefas intensivas de uso de CPU geralmente não paralelizam de forma eficiente, enquanto tarefas de I/O têm melhor desempenho na paralelização, devido aos momentos de ociosidade da CPU, tornando o processo de paralelização mais efetivo.
No entanto, é importante observar que o Python tem uma limitação conhecida como Global Interpreter Lock (GIL), que impede várias threads de executar código Python simultaneamente em um único processo.
Uma maneira de implementar o paralelismo em Python é utilizando a biblioteca joblib. O joblib fornece ferramentas simples para paralelizar tarefas em Python com facilidade, especialmente para processamento em lote. Com o joblib, é possível paralelizar facilmente um loop ou uma função, distribuindo as iterações ou chamadas de função entre múltiplos núcleos de CPU.
# Apresentação em vídeo
# Código de Implementação
```python
from joblib import Parallel, delayed
def numero_par(numero: int) -> bool:
"""
Esta função, por utilizar a CPU de maneira intensa,
não paraleliza de forma eficiente.
"""
if numero % 2 == 0:
return True
else:
return Falsedef consulta_numero(numero: int) -> bool:
"""
Esta função, por fazer uso de recursos de I/O, o que por
sua vez torna a CPU ociosa por alguns instantes, permite
que a paralelização seja mais eficiente.
"""
with open("./base_consulta.txt", "r+") as arquivo:
base_consulta = [int(id.strip("\n")) for id in arquivo.readlines()]
if numero in base_consulta:
return True
else:
return Falselista_numeros = [id for id in range(0, 5_000_000)]
"""Funções que utilizam intensamente de CPU (Cálculos matemáticos) não paralelizam muito bem."""
# Execução em uma única thread
# resultado = [numero_par(numero) for numero in lista_numeros]# Execução em multiplas threads
# resultado = Parallel(n_jobs=10)(delayed(numero_par)(numero) for numero in lista_numeros)"""Funções que utilizam de recuros de I/O paralelizam de forma mais eficiente."""
# Execução em uma única thread
#resultado = [consulta_numero(numero) for numero in lista_numeros]# Execução em multiplas threads
resultado = Parallel(n_jobs=10)(delayed(consulta_numero)(numero) for numero in lista_numeros)print(f'A quantidade de itens da lista são: {len(lista_numeros)}')
print(f'Os 10 primeiros itens da lista são: {lista_numeros[:10]}...')
print(f'O resultado da aplicação da função é: {resultado[:10]}...')```
# Referências:
Joblib: running Python functions as pipeline jobs, ***Joblib***. Disponível em: . Acesso em: 22 mar. 2024.
Global Interpreter Lock - GIL, ***Python***. Disponível em: Acesso em: 22 mar. 2024.