Iterationsproblem (stoppen und fortsetzen..)

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Fenrir
User
Beiträge: 13
Registriert: Sonntag 2. April 2017, 10:33

Hallo Leute,
Ich hab ein fuer mich kniffliges Problem und mir kommt einfach keine Idee wie ich es umsetzen koennte.

Ausgangsposition ist ein Ordner mit ein paar hundert Dateien und fuer jede Datei soll ich eine Aktion durchfuehren.
Nun kann ich aber nur 2! aktionen parallel durchfuehren, da mir sonst die Ressourcen ausgehen.
Die Frage ist nun, wie kann ich durch alle Dateien eines Ordners iterieren, die iteration aber nach 2 dateien stoppen und spaeter an der gestoppten Stelle fortfuehren?
Wahrscheinlich gibts ne mega simple Loesung, aber ich komm halt echt nicht drauf, bin fuer alle Ideen und Ansaetze offen.

vielen Dank schonmal
Benutzeravatar
kbr
User
Beiträge: 1508
Registriert: Mittwoch 15. Oktober 2008, 09:27

@Fenrir: merke Dir einfach die Dateien, welche bereits bearbeitet wurden und bearbeite diese dann später nicht erneut.
Fenrir
User
Beiträge: 13
Registriert: Sonntag 2. April 2017, 10:33

kbr hat geschrieben:@Fenrir: merke Dir einfach die Dateien, welche bereits bearbeitet wurden und bearbeite diese dann später nicht erneut.
Danke fuer diesen interessanten Ansatz.
Quasi den Namen in ner Liste speichern und dann durch die liste wieder durch... ne Ahnung wie das dann mit der Laufzeit aussieht, wenn die Anzahl der Dateien ne Groessenordnung von 10k aufwaerts bekommen?
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

10k Pfade mit einer Länge von sicher nicht mehr als 1k - es könnte ein Me Ga Byte an Daten anfallen.

Rufen sie die Küstenwache, NASA und den UNO Sicherheitsrat, da kommt was ungeheuerliches auf uns zu!
Fenrir
User
Beiträge: 13
Registriert: Sonntag 2. April 2017, 10:33

__deets__ hat geschrieben:10k Pfade mit einer Länge von sicher nicht mehr als 1k - es könnte ein Me Ga Byte an Daten anfallen.

Rufen sie die Küstenwache, NASA und den UNO Sicherheitsrat, da kommt was ungeheuerliches auf uns zu!
Keine Sorge, Behoerden sind nun alamiert und bereiten sich auf das Schlimmste vor.
Benutzeravatar
kbr
User
Beiträge: 1508
Registriert: Mittwoch 15. Oktober 2008, 09:27

Fenrir hat geschrieben:ne Ahnung wie das dann mit der Laufzeit aussieht, wenn die Anzahl der Dateien ne Groessenordnung von 10k aufwaerts bekommen?
Für Python kein Problem. Falls sich die Dateien aber alle in einem Verzeichnis befinden, möglicherweise ein Problem für das OS.
Sirius3
User
Beiträge: 18299
Registriert: Sonntag 21. Oktober 2012, 17:20

@Fenrir: warum willst Du was stoppen und danach weitermachen? Oder anders gesagt, in jeder Schleife wird solange "gestoppt" bis das Programm am Ende der Schleife wieder zurückspringt:

Code: Alles auswählen

for filename in filenames:
    do_something(filename)
Das arbeitet jede Aktion eine nach der anderen ab.
Jetzt kommt es für die Antwort für Dein Problem darauf an, wie Du da etwas parallel abarbeitest? Nämlich Parallelisierung macht es nötig, zu synchronisieren. Aber wie konkret kommt darauf an, wie Du das überhaupt machen willst.
Benutzeravatar
noisefloor
User
Beiträge: 4208
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

du kannst dir die Dateinamen von einem Generator liefern lassen.

Gruß, noisefloor
Benutzeravatar
kbr
User
Beiträge: 1508
Registriert: Mittwoch 15. Oktober 2008, 09:27

@noisefloor: das hilft aber nichts, wenn das Programm stoppt und später erneut gestartet wird. Auch sonst macht es keinen funktionalen Unterschied, solange alle Dateien nur einmal bearbeitet werden sollen. Viel interessanter ist die Frage nach dem Grund der Unterbrechung.
Fenrir
User
Beiträge: 13
Registriert: Sonntag 2. April 2017, 10:33

Sirius3 hat geschrieben:@Fenrir: warum willst Du was stoppen und danach weitermachen? Oder anders gesagt, in jeder Schleife wird solange "gestoppt" bis das Programm am Ende der Schleife wieder zurückspringt:

Code: Alles auswählen

for filename in filenames:
    do_something(filename)
Das arbeitet jede Aktion eine nach der anderen ab.
Jetzt kommt es für die Antwort für Dein Problem darauf an, wie Du da etwas parallel abarbeitest? Nämlich Parallelisierung macht es nötig, zu synchronisieren. Aber wie konkret kommt darauf an, wie Du das überhaupt machen willst.
Man Problem war, dass ich noch nie ne Situation hatte, bei der die Schleife nur teilweise durchlaufen durfte.
Hab jetzte einfach nen counter eingebaut und ne if abfrage mit modulo, nicht schoen, aber funktioniert und die iteration laeuft 2 files durch und dann werden die Aktionen durchgefuehrt.
Zusaetzlich speichere ich die Dateien in ner Liste ab und kann diese direkt ueber die letzten beiden Eintraege ansteuern.
Denke damit kann ich arbeiten :)

@ALL
Vielen Dank fuer die Hilfe und Ideen
Benutzeravatar
noisefloor
User
Beiträge: 4208
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,
das hilft aber nichts, wenn das Programm stoppt und später erneut gestartet wird.
Richtig - hatte es auch so verstanden, dass zumindest das "Hauptprogramm" nicht beendet wird sondern "nur" der Iterator pausiert werden soll (ohne Programmende).

Gruß, noisefloor
Benutzeravatar
pillmuncher
User
Beiträge: 1531
Registriert: Samstag 21. März 2009, 22:59
Wohnort: Pfaffenwinkel

In den Recipes in der Doku zu itertools gibt es die grouper-Funktion. Damit könnte man sowas bauen:

Code: Alles auswählen

files = ...
grouped = grouper(files, 2)
for group in grouped:
    for each in group:
        ...
In specifications, Murphy's Law supersedes Ohm's.
Antworten