Python-multiprocessing: Wie Sie wissen, zu verwenden, den Pool oder Prozess?

So, ich habe eine Algorithmus, den ich Schreibe, und die Funktion multiprocess soll eine andere Funktion aufrufen, CreateMatrixMp(), auf wie viele Prozesse es gibt cpus, parallel. Ich habe noch nie getan, multiprocessing vor, und kann nicht sicher sein, welche eine der folgenden Methoden effizienter ist. Das Wort "effizient" im Kontext der Funktion CreateMatrixMp() benötigen, um potenziell aufgerufen werden Tausende Male.Ich habe gelesen, die Dokumentation der python - multiprocessing Modul, und sind gekommen, um diese zwei Möglichkeiten:

Erste ist mit der Pool Klasse:

def MatrixHelper(self, args):
    return self.CreateMatrix(*args)

def Multiprocess(self, sigmaI, sigmaX):

    cpus = mp.cpu_count()
    print('Number of cpu\'s to process WM: %d' % cpus)
    poolCount = cpus*2
    args = [(sigmaI, sigmaX, i) for i in range(self.numPixels)]

    pool = mp.Pool(processes = poolCount, maxtasksperchild= 2)
    tempData = pool.map(self.MatrixHelper, args)
    pool.close()
    pool.join()

Und die nächste ist mit der Process Klasse:

def Multiprocess(self, sigmaI, sigmaX):

    cpus = mp.cpu_count()
    print('Number of cpu\'s to process WM: %d' % cpus)

    processes = [mp.Process(target = self.CreateMatrixMp, args = (sigmaI, sigmaX, i,)) for i in range(self.numPixels)]
    for p in processes:
        p.start()
    for p in processes:
        p.join()

Pool scheint die bessere Wahl sein. Ich habe gelesen, dass es verursacht weniger overhead. Und Process berücksichtigt nicht die Anzahl der cpus auf der Maschine. Das einzige problem ist, dass mit Pool in dieser Art und Weise gibt mir Fehler nach, und wenn ich das beheben, gibt es eine neue darunter. Process scheint einfacher zu implementieren, und für alles, was ich weiß, es kann die bessere Wahl sein. Was macht Ihrer Erfahrung sagen Sie?

Wenn Pool verwendet werden soll, dann bin ich Recht in der Wahl map()? Es wäre bevorzugt, dass die Reihenfolge beibehalten wird. Ich habe tempData = pool.map(...) weil die map - Funktion soll, um eine Liste der Ergebnisse von jedem Prozess. Ich bin nicht sicher, wie Process verarbeitet die zurückgegebenen Daten.

  • Dies scheint ähnlich zu stackoverflow.com/questions/18176178/... vielen Dank
  • Ich habe gelesen, dass post. Allerdings habe ich einige bitten, andere Fragen hier zu beantworten. Er wird mit zwei Ziel-Funktionen, während ich mich mit ein, er führt keine Argumente an, während ich pass mehrere, und er nicht besorgt zu sein mit seinem target wird eine Instanz-Methode, wie mir ist. Ich habe eine Menge Forschung auf diesem so weit, und beide Pool und Process scheinen, sich anders zu Verhalten in verschiedenen Kontexten, und es scheint sicher, dass einer besser wäre, in bestimmten Situationen, in anderen nicht. Ich dachte, es angebracht, starten Sie eine neue Frage.
InformationsquelleAutor Anonymous | 2015-07-29
Schreibe einen Kommentar