Sobes.tech
Junior — Middle

Por que o uso de multithreading em Python não leva a uma aceleração perceptível na execução de cálculos pesados dependentes da CPU?

sobes.tech IA

Resposta da IA

Na implementação padrão do Python, o CPython usa o GIL (Global Interpreter Lock), que é um bloqueio global do interpretador que permite executar apenas um bytecode Python em um thread de cada vez. Por causa disso, a multitarefa não melhora o desempenho em cálculos pesados dependentes da CPU, pois os threads não podem realmente ser executados em paralelo em múltiplos núcleos.

Para contornar essa limitação, usam-se:

  • Multiprocessamento (módulo multiprocessing), onde cada processo tem seu próprio interpretador e GIL.
  • Uso de extensões em C que liberam o GIL durante os cálculos.
  • Implementações alternativas do Python sem GIL (por exemplo, Jython, IronPython).

Exemplo de uso de multiprocessing para cálculos paralelos:

from multiprocessing import Pool

def heavy_calc(x):
    # Uma função pesada dependente da CPU
    return x * x

if __name__ == '__main__':
    with Pool(4) as p:
        results = p.map(heavy_calc, range(10))
    print(results)