Ich habe ein kurzes Problem mit Pythons os.path.getmtime()
-Funktion. Ich habe ein seltsames Verhalten beobachtet. Ich arbeite an einer Web-App, die regelmäßig überprüft, ob eine bestimmte Datei geändert wurde und entscheidet, ob sie auf dieser Basis aktualisiert wird oder nicht.
In meiner lokalen Python-Befehlszeile, wenn ich die Datei ändere und os.path.getmtime(file_name)
aufruft, hat sich der Rückgabewert von mtime
geändert, um die Änderung in der Datei widerzuspiegeln.
Wenn ich jedoch os.path.getmtime()
in meiner Web-App anrufe, ist der Rückgabewert vor und nach der Änderung derselbe. Ich habe online recherchiert und einige Dinge gefunden, die darauf hindeuten, dass das OS-Modul für die Änderung der zu registrierenden Datei neu geladen werden muss. In meiner Web-App habe ich das Modul os
neu geladen, aber mtime
spiegelt immer noch keine Änderungen an der Datei wider. Ist jemand anderes schon einmal auf dieses Problem gestoßen oder hat er eine Lösung? Ich habe unten ein Code-Snippet von der Webapp eingefügt:
Ich habe nicht genug Reputation, um das als Kommentar hinzuzufügen ...
Es ist nicht klar, wie Sie testen, macht eine einzelne Seite Ihrer Web-App
Oder
Wenn Ihr Web-App-Testprozess
istmeine erste Vermutung ist Webclient, Proxy oder Server-Caching.
Ich bin heute auf dieses Problem gestoßen und habe diese Frage gefunden, also dachte ich, ich würde es hier dokumentieren. Mein Fall war ein Komponententest, also könnte es etwas anders sein, da es kleinere Zeitmaßstäbe betrifft als ein manueller Test.
Die Änderungszeit ist durch Ihr Dateisystem begrenzt. Wenn Sie die Modifikationszeit überprüfen, schreiben Sie eine kleine Datenmenge und überprüfen Sie die Änderungszeit erneut. Die beiden Zeitstempel sind möglicherweise genau gleich. Sie sind gleich, wenn die Zeit zwischen der ersten Zeitstempelprüfung und dem Ende des Schreibvorgangs geringer als die Zeitauflösung ist.
Einige Statistiken zur Zeitauflösung verschiedener gebräuchlicher Dateisysteme:
Sie können erwarten, dass eingebettete Systeme FAT verwenden und eine Zeitauflösung von 2 Sekunden haben. Ältere Windows-Systeme liegen im Bereich von 2 Sekunden. Neuere Windows-Systeme haben 100ns oder 10ms. Ältere UNIX-Systeme haben oft 1s. Neuere UNIX-Systeme haben eine Auflösung von 1ns.
Wenn <time for time stamp check> + <time for file write>
kleiner als die Zeitauflösung ist, könnte die Datei so aussehen, als ob sie nicht geändert wurde.
Ich sehe diese möglichen Lösungen:
Vielleicht könnten Sie versuchen, allgemeine Statistiken über die Datei zu erhalten, wie z. B. die Größe.
Ist die erwartete Größe / mtime der Datei vor und nach der Änderung auf dem Server (d. h. beim Anzeigen von ls -l in einem Terminalfenster) gleich oder verschieden.
Wenn die Statistiken bei der Verwendung solcher Kommandozeilen-Tools identisch sind, kann es sein, dass die Datei nicht dort bearbeitet wird, wo Sie denken.
Wenn die Größe / mtime unterschiedlich ist, verwenden Sie vielleicht
%Vor%Und sehen Sie, ob es einen der richtigen Werte gibt.
Tags und Links python python-2.7 os.path