Ich versuche, ein Programm in Python zu erstellen, das gleichzeitig mehrere Instanzen (15) einer Funktion über verschiedene Prozessoren ausführt. Ich habe dazu recherchiert und habe das untenstehende Programm mit dem Process-Tool aus der multiprocessing-Bibliothek erstellt.
Leider führt das Programm jede Instanz der Funktion sequenziell aus (es scheint darauf zu warten, dass eine fertig ist, bevor es zum nächsten Teil der Schleife übergeht).
from __future__ import print_function
from multiprocessing import Process
import sys
import os
import re
for i in range(1,16):
exec("path%d = 0" % (i))
exec("file%d = open('%d-path','a', 1)" % (i, i))
def stat(first, last):
for j in range(1,40000):
input_string = "water" + str(j) + ".xyz.geocard"
if os.path.exists('./%s' % input_string) == True:
exec("out%d = open('output%d', 'a', 1)" % (first, first))
exec('print("Datei %s wird verarbeitet...", file=out%d)' % (input_string, first))
with open('./%s' % input_string,'r') as file:
for line in file:
for i in range(first,last):
search_string = " " + str(i) + " path:"
for result in re.finditer(r'%s' % search_string, line):
exec("path%d += 1" % i)
for i in range(first,last):
exec("print(path%d, file=file%d)" % (i, i))
processes = []
for m in range(1,16):
n = m + 1
p = Process(target=stat, args=(m, n))
p.start()
processes.append(p)
for p in processes:
p.join()
Ich bin relativ neu im Programmieren und habe keine Erfahrung mit Parallelisierung - jede Hilfe würde sehr geschätzt werden.
Ich habe das gesamte Programm oben eingefügt, wobei "Some Function" durch die tatsächliche Funktion ersetzt wurde, um zu zeigen, dass es sich nicht um ein Timing-Problem handelt. Das Programm kann Tage dauern, um alle 40.000 Dateien (von denen jede ziemlich groß ist) durchzugehen.