Nachdem der Vorgang abgeschlossen ist, sehe ich, dass die Sperrdatei nicht gelöscht wurde. Gibt es einen Grund, warum die flock
Datei aufbewahrt wird? Und woher flock
weiß ich, ob eine Sperre erworben wurde?
Hier ist das Beispiel aus einer crontab
Datei
* * * * * flock python <script_name>.py
Antwort1
Für die meisten Anwendungsfälle von flock
ist es sehr wichtig, dass die Sperrdateinicht"bereinigt" werden. Andernfalls stellen Sie sich dieses Szenario vor:
- Prozess A öffnet die Sperrdatei, stellt fest, dass sie nicht existiert, und erstellt sie.
- Prozess A erwirbt die Sperre
- Prozess B öffnet das Schloss (stellt fest, dass es bereits existiert)
- Prozess B versucht, die Sperre zu erhalten, muss aber warten
- Prozess A löst die Sperre
- Prozess B erhält die Sperre sofort
- Prozess A löscht die Sperrdatei
- Prozess C öffnet die Sperrdatei, stellt fest, dass sie nicht existiert, und erstellt eine neue. Beachten Sie, dass er jetzt eineandersSperrdatei, die von Prozess B gesperrt wurde.
- Prozess C versucht, die Sperre zu erhalten, und hat Erfolg … aber er hätte warten müssen, da bei Prozess B die Sperrdatei [eine frühere Version] noch immer geöffnet und gesperrt ist.