Como somar um loop em paralelo usando multiprocessamento em Python
Estou tendo dificuldades para entender como usar o módulo de multiprocessamento do Python.
Eu tenho uma soma de1
paran
Onden=10^10
, que é muito grande para caber em uma lista, o que parece ser o objetivo de muitos exemplos on-line usando o multiprocessamento.
Existe uma maneira de "dividir" o intervalo em segmentos de um determinado tamanho e executar a soma de cada segmento?
Por exemplo
def sum_nums(low,high):
result = 0
for i in range(low,high+1):
result += i
return result
E eu quero calcularsum_nums(1,10**10)
dividindo-o em muitossum_nums(1,1000) + sum_nums(1001,2000) + sum_nums(2001,3000)...
e assim por diante. Eu sei que existe uma forma fechadan(n+1)/2
mas finja que não sabemos disso.
Aqui está o que eu tentei
import multiprocessing
def sum_nums(low,high):
result = 0
for i in range(low,high+1):
result += i
return result
if __name__ == "__main__":
n = 1000
procs = 2
sizeSegment = n/procs
jobs = []
for i in range(0, procs):
process = multiprocessing.Process(target=sum_nums, args=(i*sizeSegment+1, (i+1)*sizeSegment))
jobs.append(process)
for j in jobs:
j.start()
for j in jobs:
j.join()
#where is the result?