Ich versuche, den folgenden Code zu teilen, um Multiprozessing in Python zu ermöglichen, und es wird wirklich eine frustrierende Aufgabe für mich - ich bin neu in Multiprocessing und habe die Dokumentation und so viele Beispiele wie möglich gelesen finde aber immer noch keine Lösung, die es auf allen CPU-Kernen gleichzeitig funktionieren lässt.Multiprocessing iterable in Python
Ich möchte die Iterables in Viertel teilen und es den Test parallel berechnen lassen.
Mein einziger Thread Beispiel:
import itertools as it
import numpy as np
wmod = np.array([[0,1,2],[3,4,5],[6,7,3]])
pmod = np.array([[0,1,2],[3,4,5],[6,7,3]])
plines1 = it.product(wmod[0],wmod[1],wmod[2])
plines2 = it.product(pmod[0],pmod[1],pmod[2])
check = .915
result = []
for count, (A,B) in enumerate(zip(plines1,plines2)):
pass
test = (sum(B)+10)/(sum(A)+12)
if test > check:
result = np.append(result,[A,B])
print('results: ',result)
Ich weiß, dies ist ein sehr kleines Beispiel aus einem Paar von 3x3 Matrizen, aber ich mochte es zu einem Paar von Matrizen anzuwenden, die größer sind, und nehmen zu eine Stunde zu berechnen. Ich freue mich über jeden gegebenen Rat.
Nun, zum einen würde ich 'result = np.append (result, [A, B])' aus dem Inneren der Schleife nehmen. Warum verwenden Sie hier überhaupt ein "numpy" Array statt einer "Liste"? Das Anhängen auf diese Weise ist bei einem Array gegenüber einer Liste sehr ineffizient. Das Seltsame ist, dass Sie 'result = []' auch verwenden ... –
Für Skalierbarkeit und Effizienz habe ich mich entschieden, numpy zu verwenden. Wie gesagt, die 3x3-Matrizen sind nur für das Beispiel. Und die for-Schleife ist eine Iteration, sie speichert keine Daten, wenn ich sie nicht irgendwie abrufe. –
Ja, aber 'numpy' macht Ihren Code nicht magisch skalierbarer. Wenn Sie so "numpy" verwenden, haben Sie den gegenteiligen Effekt. –