2017-12-08 5 views
0

Ich habe eine Python script, die Operationen wie read, write und delete auf Dateien in einem Verzeichnis ausführt. Bevor Sie einen dieser Vorgänge ausführen, wird os.listdir ausgeführt, um die Liste der Dateien abzurufen. Eine Datei wird zufällig ausgewählt und eine Operation wird ausgeführt.Race-Bedingung, wenn mehrere Prozesse versucht, Dateien im selben Verzeichnis zu lesen/zu löschen

Aber ich muss mehrere Instanzen des Skripts ausführen. Es besteht also die Möglichkeit eines Race Conditions. Eine Datei kann von einer Instanz gelöscht werden, während eine andere Instanz versucht, sie zu lesen.

Was ist ein guter Weg, um dieses Problem zu überwinden?

Antwort

0

Sie müssen zuerst die kritischen Bereiche identifizieren. Dann müssen Sie sie durch eine Art Semaphor schützen. Dies könnte eine Sperrdatei oder ein echter Semaphor sein, wie er von Ihrem Betriebssystem angeboten wird.

Die eigentliche Herausforderung wird es sein, die kritischen Regionen (zeitnah) so klein wie möglich zu halten.

Da Sie nur das Skript gegen sich selbst schützen müssen, sollte ein einzelner Semaphor es tun. Wenn Sie jedoch mehr als einen Semaphor benötigen, achten Sie darauf, nicht mehr als einen Semaphor zu verwenden, oder seien Sie sehr vorsichtig, um keine potenziellen Deadlocks zu erzeugen.

0

Der beste Ansatz ist für Sie zu entscheiden, was das richtige Verhalten sein soll. Dies sind klassische Probleme in der Datei- und Datenbankverwaltung, eine klare Richtlinie wird zuerst benötigt.

Verwandte Themen