Mais uma discussão acerca de Threads

1. Mais uma discussão acerca de Threads

Lucas Vinicius Ferreira da Silva
iWeya

(usa Lubuntu)

Enviado em 14/02/2017 - 17:12h

Definitivamente: se existe o gil (global interpreter lock), como o uso de multi-threading pode acelerar um script em Python?

Esses dias estive programando em Python. Era algo simples, na verdade, eu diria que é trivial: um verificador de primos. Ele faz parte do meu estudo sobre RSA. Sua primeira versão foi aquela medíocre que todos conhecemos:

def ehPrimo(num):
if num % 2 == 0:
return False

end = round(num**0.5) + 1
for tmp in range(3, end, 2):
if num % tmp == 0:
return False
return True

Até o uso em números de 16 bits, ela caiu bem. Acima disso, tive problemas graves. Ante tal situação, me recordei do threading. Pesquisei rapidamente no Google e pronto, já achei saber o suficiente para o meu fim (e realmente era o suficiente). Refiz o script:

import threading

div = 0

class verificadorPrimo(threadig.Thread):
def __init__(self, num, ini):
self.num = num
self.ini = ini
threading.Thread.__ini__(self)
def run(self):
global div
end = round(self.num ** 0.5) + 1

for tmp in range(self.ini, end, 4):
if div != 0:
break
if self.num % tmp == 0:
div = tmp
break

def ehPrimo(num):
global div

if num % 2 == 0:
return False

th1 = verificadorPrimo(num, 3)
th2 = verificadorPrimo(num, 5)
th1.start()
th2.start()
th1.join()
th2.join()

if div == 0:
return True

div = 0

return False

Bom, consegui uma melhora significativa no desempenho, mas, eu realmente não entendo o porquê. Tendo em vista que o Python impede o uso real de mais de um núcleo, como o multithreading acelerou o meu script?


  






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts