Ho difficoltà a capire come utilizzare il modulo di multiprocessing di Python.Come sommare un loop in parallelo usando la multiprocessing in Python
Ho una somma 1
-n
dove n=10^10
, che è troppo grande per entrare in un elenco, che sembra essere la spinta dei tanti esempi online utilizzando multiprocessing.
C'è un modo per "dividere" l'intervallo in segmenti di una certa dimensione e quindi eseguire la somma per ogni segmento?
Per esempio
def sum_nums(low,high):
result = 0
for i in range(low,high+1):
result += i
return result
E voglio calcolare sum_nums(1,10**10)
rompendo in su in molti sum_nums(1,1000) + sum_nums(1001,2000) + sum_nums(2001,3000)...
e così via. So che c'è una forma stretta n(n+1)/2
ma fingiamo di non saperlo.
Ecco che cosa ho provato
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?
così la vostra domanda è 'come faccio a dividere un grande elenco in N liste più piccole'? –
@JoranBeasley No. La mia domanda è come usare il multiprocessing per calcolare una funzione su molti segmenti e sommare i risultati. Ho aggiunto del codice sopra. – user4817101
Guarda le risposte in [this] (http://stackoverflow.com/questions/2846653/python-multithreading-for-dummies/29774367#29774367) domanda - dovrebbe darti una buona idea – letsc