Aufruf von Funktion mit Prozessen gibt Ergebnis mehr als ein Mal aus
Verfasst: Sonntag 16. Januar 2022, 12:10
Hallo, ich habe folgende kleine Anwendung:
Nun hätte ich gerne folgende Ausgabe:
stattdessen beomme ich aber
Sprich: jede Ausgabe wird so oft vorgenommen, wie ich Prozesse habe. Das ist natürlich nicht das gewünschte Ergebnis. Wie kann ich das korrigieren, dass es wie gewünscht funktioniert?
LG
Code: Alles auswählen
from multiprocessing import Process, Queue
def reduce(que, data):
que.put(sum(data))
def calc_mean_serial(data):
return sum(data) / len(data)
def calc_mean_parallel(data, num_procs=8):
sum = 0
if __name__ == '__main__':
chunk = (int) (len(data) / num_procs)
procs = []
q = Queue()
for i in range(num_procs):
p = Process(target=reduce, args=(q, data[i*chunk:i*chunk+chunk if i != num_procs-1 else None]))
p.start()
procs.append(p)
for p in procs:
p.join()
while not q.empty():
sum = sum + q.get()
return sum / len(data)
print("serial", calc_mean_serial([i for i in range(1,100000)]))
print("parallel", calc_mean_parallel([i for i in range(1,100000)]))
Code: Alles auswählen
serial 50000.0
parallel 50000.0
Code: Alles auswählen
serial 50000.0
serial 50000.0
parallel 0.0
serial 50000.0
parallel 0.0
serial 50000.0
parallel 0.0
serial 50000.0
parallel 0.0
serial 50000.0
parallel 0.0
serial 50000.0
parallel 0.0
serial 50000.0
parallel 0.0
serial 50000.0
parallel 0.0
parallel 50000.0
LG