Frage

Ich habe eine Frage zu, wie flock() funktioniert, vor allem in Python. Ich habe ein Modul, das eine serielle Verbindung (über os.open()) öffnet. Ich muss diesen Thread sicher machen. Es ist einfach genug, so dass es Thread-sicher, wenn sie in dem gleichen Modul mit threading.Lock() arbeiten, aber wenn das Modul aus verschiedenen Orten importiert wird, es bricht.

Ich dachte an flock(), aber ich habe Probleme, genügend Informationen über die Suche, wie genau funktioniert strömen. Ich habe gelesen, dass die flock () öffnet die Datei, wenn die Datei geschlossen wird. Aber gibt es eine Situation, die die Datei geöffnet, wenn Python Abstürze halten?

Und was genau erlaubt ist, die gesperrte Datei zu verwenden, wenn LOCK_EX gesetzt? Genau das Modul, das die Datei gesperrt? Jedes Modul, das aus dem Skript importiert wurde, die ursprünglich ausgeführt wurde?

War es hilfreich?

Lösung

Wenn ein Prozess das OS stirbt sollte aufzuräumen alle geöffneten Dateiressourcen (mit einigen Einschränkungen, ich bin sicher). Dies liegt daran, die beratende Sperre freigegeben wird, wenn die Datei geschlossen wird, ein Vorgang, der als Teil der OS Bereinigung erfolgt, wenn die python Prozess beendet wird.

Denken Sie daran, Herde (2) ist lediglich Beratungs:

  

Beratungssperren erlauben eine Zusammenarbeit Prozesse konsistent Operationen auf Dateien durchzuführen, aber [andere verhielten sich schlecht] Prozesse noch diese Dateien ohne Verwendung von Empfehlungssperren zugreifen können.

Herde (2) Arbeitsgeräte ein LESER Schreiber-Sperre. Sie können nicht die gleiche Datei zweimal mit LOCK_EX strömen, aber eine beliebige Anzahl von Menschen kann es mit LOCK_SH Herde gleichzeitig (solange niemand sonst eine LOCK_EX drauf hat).

  

Der Verriegelungsmechanismus ermöglicht es, zwei Arten von Sperren: gemeinsame Sperren und exklusiven Sperren. Zu jeder Zeit mehr gemeinsamen Sperren können auf eine Datei angewandt werden, aber zu keiner Zeit sind mehrere exklusive oder beiden gemeinsamen und exklusive, Schlösser erlaubten gleichzeitig auf einer Datei.

Herde arbeiten an der O / Prozessebene und sind unabhängig von Python-Modulen. Ein Modul kann verlangen, n Schlösser oder n Schlösser könnten aufgefordert werden, über m Module. Jedoch nur ein Verfahren zur Herstellung einer LOCK_EX Sperre auf einer bestimmte Datei zu einem bestimmten Zeitpunkt halten kann.

YMMV auf einem "Nicht-UNIX" -System oder ein nicht-lokales Dateisystem.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top