Seite 1 von 1

File per For-Schleife überschreiben (Timeroptimierung)

Verfasst: Mittwoch 26. April 2006, 09:08
von keboo
Hallo Leute!

In meinem Skript werden in einer For Schleife Daten von unterschiedlicher Größe immer wieder in ein Zwischenfile gespeichert, dass bei jedem Durchgang überschrieben wird.

Die For Schleife ist aber schneller, als die Festplattengeschwindigkeit offensichtlich.

Gibt es eine elegantere Methode als mit einem Timer

Code: Alles auswählen

time.sleep(0.4)
zu arbeiten? Wie kann ich prüfen, ob das Zwischenfile auf die Platte geschrieben wurde?

Weil die Zwischenfiles in der Größe variieren, wäre eine dynamische Optimimierung toll.

Danke,

Johannes

Verfasst: Mittwoch 26. April 2006, 12:07
von querdenker
Hi keboo,
du kannst das schreiben erzwingen.

Code: Alles auswählen

fh=file('/path/to/file','wa+')
fh.write(somedata)
fh.flush()

#Ende des Programmes
fh.close()

mfg, querdenker

Verfasst: Mittwoch 26. April 2006, 12:19
von keboo
Hi querdenker!

Leider funktioniert das noch nicht so ganz in meinem Skript.

Mit welchem Befehl kann ich die Schleife so lange stoppen, bis die Datei auf der Festplatte sicher überschrieben ist?


Danke.

Johannes

Verfasst: Mittwoch 26. April 2006, 12:48
von murph
mit 'flush' leerst du die Zwischenablage, wenn die Dateien nicht mehr gebraucht werden. Ich sehe das als Lösung an, weil wenn sie nicht mehr gebraucht werden, eigentlich schon geschrieben sein sollten.

Verfasst: Mittwoch 26. April 2006, 12:52
von CM
Hi,

mir ist ehrlich gesagt Dein Problem nicht klar - bzw. ob Dein Lösungsansatz tatsächlich die Lösung für Dein Problem ist. Was willst Du denn genau machen? Gleichzeit aus einer Datei Daten lesen und in dieselbe Datei schreiben? Das ist in den seltensten Fällen wirklich clever. Vielleicht hilft Dir das tempfile Modul weiter. Eine Möglichkeit wäre womöglich Deine Daten einzulesen, sie zu verwursten, in ein Tempfile auszulagern und am Ende der Schleife Deine ursprüngliche Datei mit dem Tempfile zu ersetzen - aber ehrlich gesagt, bin ich nicht sicher, ob das ein wirklich besserer Ansatz ist.

Ansonsten ist querdenkers Lösung eigentlich schon nicht schlecht. Du sagst das funktioniert bei Dir nicht. Warum nicht? Magst Du mal Beispielcode inkl. Besschreibung, was er genau tun soll, geben? Dann entfällt das Raten. ;-)

Gruß,
Christian

Verfasst: Mittwoch 26. April 2006, 15:05
von Leonidas
CM hat geschrieben:Vielleicht hilft Dir das tempfile Modul weiter.
Vielleicht auch StringIO, welches Dateien im Speicher "emuliert" (somit keine Shcreib und Lesezugriffe auf der Festplatte nötig). Aber wie CM schon sagte, wir können nur raten.

Verfasst: Mittwoch 26. April 2006, 16:16
von keboo
Danke für eure Antworten.

Der Fehler in meinem Skript war, dass ich einen Subprocess über POPEN aufgerufen habe. Dieser Befehl öffnet anscheinend den Prozess nur, ohne zu achten, ob er auch wieder geschlossen wird. CALL hatt mein Problem gelöst.

Danke,

Johannes

Verfasst: Mittwoch 26. April 2006, 17:20
von CM
Hoi Johannes,

tut mir leid, aber das reizt mich doch noch zu einer Antwort: Vielleicht magst Du beim nächsten mal doch etwas Code und eine detaillierte Problembeschreibung rausrücken? Das könnte womöglich schneller zum Ziel führen ... :wink:

Besten Gruß,
Christian

Verfasst: Donnerstag 27. April 2006, 08:36
von keboo
Normalerweise "rück" ich eh mit Code heraus. Das Problem ist aber, dass dieser schon 300 Zeilen lang ist und ich das euch nicht antun wollte.

Zudem hätte ich auch den falschen Code euch gezeigt, da ich von Anfang an das Problem an einer anderen Stelle vermutete.

Danke trotzdem für eure Bemühungen.

Ich kann eure Tipps trotzdem anwenden.

Python ist echt toll muss ich sagen.

LG
johannes