Ich kenne mich mit der Theorie hinter der Paralllel-Programmierung nicht wirklich aus (bin ja auch kein Informatiker

Der Hauptteil des Programmes geht eine Fits Datei (das ist eine Bild Datei) Pixel für Pixel durch, und jedes Pixel wird verarbeitet.
Da die Berechnung der einzelnen Pixel unabhängig von den anderen ausgeführt werden kann, und das ergebniss in einem globalen Array gespeichert (Die Position im Array hängt von der Pixel Koordinate ab, daher kann es da auch keine Kollisionen geben).
Beispiel:
Code: Alles auswählen
import numpy
bildarray = numpy.random((200,200))
resultatarray = numpy.zeros(shape=bildarray.shape)
for x in range(200):
for y in range(200):
resultatarray[x][y] = bildarray[x][y]**2
print x,y
Meine Idee war nun das ich thread benutze.
Code: Alles auswählen
import numpy,thread
bildarray = numpy.random(shape=(200,200))
resultatarray = numpy.zeros(shape=bildarray.shape)
def calc(x,y):
global resultatarray
resultatarray[x][y] = bildarray[x][y]**2
global threads
threads-=1
print x,y
threads = 0
threadlimit = 3 # 3 von 4 kernen sollen benutzt werden
for x in range(200):
for y in range(200):
while threads>=threadlimit:
pass
threads+=1
thread.start_new_thread(calc,(x,y))
Aber nun sind die Ausgaben total durcheinander, abundzu stehen sogar die x y Koordinaten in einander, also als würde ein Prozess anfangen die Ausgabe zu schreiben, und noch bevor es fertig ist, ein anderer ebenfalls direkt daneben weiter schreibt.
Und am Ende gibt es dann noch ein paar unhandled thread exceptions.
Wie gesagt, in der Theorie hab ich nicht viel Ahnung davon, aber so ganz naiv gedacht, dachte ich das das so in etwa funktionieren sollte.
Gehts leichter/angenehmer/effizienter? Das Ziel des ganzen ist die beschleunigung des Prozesses. Wenn ich das z.b. auf 2 Kernen parallel laufen lassen kann, würde es schon doppelt so schnell gehen.
Thx.