2

alle zu laufen. Ich habe eine Datei Python (zum Beispiel namens: run.py). Dieses Programm benötigt einige Parameter (python run.py param1 param2 ...) und jeder Tupel-Parameter ist eine Einstellung. Jetzt muss ich viele Einstellungen gleichzeitig ausführen, um alle so schnell wie möglich zu beenden. Ich schrieb eine Datei run.sh wie folgt:Wie schreibe ich ein Skript, um mehrere Prozesse in Multi-Core-Maschine effektiv

Diese Datei wird alle Prozesse gleichzeitig ausführen, oder? Und ich laufe auf der Maschine 64 Core-CPU. Ich habe eine Frage hier:

  1. Wird jeder Prozess auf einem Kern laufen oder nicht?
  2. Wenn nicht, wie kann ich das tun?
  3. Wenn ich einen Prozess pro einem Kern laufen kann, die Zeit des setting1 laufen wird laufen zu Zeit gleich, wenn ich laufe nur ein individuelles Verfahren: Python run.py setting1
+0

Schauen Sie sich ** GNU Parallel **. Sie können steuern, wie viele Prozesse gleichzeitig ausgeführt werden, und auch Permutationen von Argumenten generieren. Suche auf StackOverflow nach '[gnu-parallel]' und klicke auf 'neuste'. –

Antwort

0

Haben Sie versucht, das multiprocessing Modul zu benutzen?

Angenommen, Sie einige Funktion work(arg1, arg2) mehrfach parallel ausgeführt werden soll, dann würden Sie mit so etwas wie dieses

import multiprocessing 
p = multiprocessing.Pool(multiprocessing.cpu_count() 
results = p.starmap(work, [(arg11, arg12), (arg21, arg22)....] 
# do something with the list of results 

am Ende Wenn Ihre Funktionen sehen alle sehr verschieden voneinander sind, dann können Sie durch Schreiben wegkommen ein Funktions-Wrapper, wie folgt:

def wrapper(dict_args, inner_function): 
    return inner_function(dict_args) 
# then launch the multiprocessing mapping 

p.starmap(wrapper, [({'arg1': v1, 'arg2': v2}, job1), ({'foo': bar}, job2)..] 
+0

danke, ich werde es versuchen. Aber wie Sie wissen, laufe ich nicht nur auf einer Datei, sondern auch auf vielen Dateien unabhängig voneinander. zum Beispiel Datei run1.py für Job 1, run2.py für Job 2 ... –

Verwandte Themen