2016-10-06 2 views
0

Ich habe diesen Bash-Skript:Lauf Python parallel

#!/bin/bash 
for i in `seq 1 32`; 
do 
python run.py file$i.txt & 
if (($i % 10 == 0)); then wait; fi 
done 
wait 

Ich mag es auf einem Cluster mit 64 Kernen laufen. Wie werden die 10 Dateien auf die Kerne verteilt? WENN ich 10 freie Kerne gleichzeitig habe, nimmt jeder Kern eine Datei oder es gibt einen komplexeren Weg? Außerdem, wenn alle Erz frei sind, sollte ich 64 Dateien gleichzeitig ausführen, oder es kann Probleme auftreten, wenn ich alle benutze (wie das Programm möglicherweise aufgrund von Speicherproblemen verlangsamt?

+1

Ich würde nur das Multiprocessing-Paket verwenden (https://docs.python.org/2/library/multiprocessing.html) Sie können Erstellen Sie einen Jobpool und definieren Sie eine maximale Anzahl von Kernen. Jeder von ihnen wird einfach zum Pool zurückkehren, sobald er seine Arbeit erledigt hat, und einen neuen holen, wenn noch einer übrig ist ... –

Antwort

0

Wenn Sie ausgeführt werden Parallel zu den Skripten der Shell delegieren Sie die Verantwortung für die Prozessverwaltung an den OS-Scheduler, was keine schlechte Idee ist, da das Betriebssystem weiß, wie der Prozess durch die Prozessorkerne gehandhabt wird. Manchmal benötigen Sie jedoch mehr Kontrolle über die Tasks Ausführung (vielleicht, weil Sie eine wirklich große Anzahl von Aufgaben ausführen), wenn ja, meiner Meinung nach der beste Ansatz wird Ihre Aufgaben mit dem Python-Multiprocessing-Modul laufen und programmieren Sie die Aufgaben-Ausführungslogik.