bitte sag mir
Wenn Sie dem folgenden Hauptargument ein geeignetes Argument geben und es ausführen, erhöht sich die Anzahl der Prozesse und der Speicher wird knapp, daher möchte ich dies verhindern.
import multiprocessing
def score4abc(a,b):
score = a,b
return score
def wrapper_score4multi(args):
return score4abc(*args)
def main(a,foo):
for i in range(500):
pool = multiprocessing.Pool(32)
pool.map(wrapper_score4multi,[[a,b] for b in foo]#32 Prozesse befinden sich immer im R-Zustand und abgeschlossene Prozesse bleiben im S-Zustand.
pool.close()
Einfach ausgedrückt fühlt es sich ziemlich gut an, die verbleibenden Prozesse mit einer Klebemethode wie pool.kill () abbrechen zu können.
Als ich es mit ps aux überprüfte, blieb der Prozess, der während der Ausführung des folgenden Codes parallel verarbeitet wurde, lange Zeit ausgesetzt, sodass ich vermutete, dass dies die Ursache war. Laut dem offiziellen Dokument heißt es, dass es mit Pool.terminate () stoppt und mit Pool.close () endet, aber auch nach Pool.close () perfekt bleibt. Ich habe die Details vergessen, aber ich kann Process nicht verwenden, um mehrere Argumente an die Funktion zu übergeben, die ich parallel verarbeiten möchte, und ich denke, es war schwierig, ohne pool.map zu verwenden, wie unten gezeigt. Wenn Sie den Prozess identifizieren und jede Minute in der Shell beenden, wird sich die Anzahl der Prozesse im Laufe der Zeit schnell erholen (zu niedrige Schicht, um die Ursache selbst zu identifizieren). Das Obige wird von Cython kompiliert und ausgeführt. Die Python-Version des Hauptaufrufers oben ist 2.7.3.
Recommended Posts