Falc410
Vice Admiral
- Registriert
- Juni 2006
- Beiträge
- 6.626
Ich teste gerade, ob ich mehrere Container die ein Python Script starten um Daten aus einem NFS Mount vearbeiten, starten kann, damit diese parallel arbeiten.
Das Problem ist, dass ich natürlich nicht 2x die selben Daten verabeiten möchte - gleichzeitig schon gar nicht.
Meine Idee war jetzt die Liste mit Directories im Mount zu shufflen vor der Ausführung, so dass, theoretisch, jedesmal mit einem anderen Ordner gestartet wird.
Bevor ich dann die Daten verarbeite, schaue ich nach, ob es schon ein Output Verzeichnis gibt. Falls nicht, lege ich eins an und erstelle eine leere Datei darin und beginne mit dem Verarbeiten.
Falls es die Datei schon gibt, überspringe ich das Verzeichnis in der Liste und mache mit dem nächsten weiter, da ich davon ausgehe, dass der andere Prozess die schon bearbeitet (gerade jetzt oder schon fertig).
Ist halt nicht perfekt, da theoretisch wenn es doof läuft, die gleichzeitig schauen ob es die Datei gibt und dann gleichzeitig die Datei anlegen und weitermachen. Jemand einen Vorschlag wie ich das optimieren kann?
Das Problem ist, dass ich natürlich nicht 2x die selben Daten verabeiten möchte - gleichzeitig schon gar nicht.
Meine Idee war jetzt die Liste mit Directories im Mount zu shufflen vor der Ausführung, so dass, theoretisch, jedesmal mit einem anderen Ordner gestartet wird.
Bevor ich dann die Daten verarbeite, schaue ich nach, ob es schon ein Output Verzeichnis gibt. Falls nicht, lege ich eins an und erstelle eine leere Datei darin und beginne mit dem Verarbeiten.
Falls es die Datei schon gibt, überspringe ich das Verzeichnis in der Liste und mache mit dem nächsten weiter, da ich davon ausgehe, dass der andere Prozess die schon bearbeitet (gerade jetzt oder schon fertig).
Ist halt nicht perfekt, da theoretisch wenn es doof läuft, die gleichzeitig schauen ob es die Datei gibt und dann gleichzeitig die Datei anlegen und weitermachen. Jemand einen Vorschlag wie ich das optimieren kann?
Python:
def check_duplicate_report(dir):
# Test if new Output Folder already exists, skip if there is an Report Directory for today already
if not os.path.exists(dir + os.sep + REPORT_DATE_TODAY + os.sep + TOOL_NAME):
if not os.path.exists(dir + os.sep + REPORT_DATE_TODAY):
if not DRY_RUN:
os.mkdir(dir + os.sep + REPORT_DATE_TODAY)
if not DRY_RUN:
os.mkdir(dir + os.sep + REPORT_DATE_TODAY + os.sep + TOOL_NAME)
open(dir + os.sep + REPORT_DATE_TODAY + os.sep + TOOL_NAME + os.sep + 'started', mode="w").close()
return False
elif os.listdir(dir + os.sep + REPORT_DATE_TODAY + os.sep + TOOL_NAME):
# this only checks if files exists in this folder
logging.warning("Folder for %s already exists and is not empty! Report might have run previously. Skipping folder..." % (dir + os.sep + REPORT_DATE_TODAY + os.sep + TOOL_NAME))
return True