Hallo,
wie kann ich prüfen, ob eine gemeinsam genutzte Datei bereits vom anderen Prozess geöffnet wurde und somit gerade busy ist ?
Seven
Prüfen, ob Datei bereits von anderem Prozess geöffnet ?
-
- User
- Beiträge: 408
- Registriert: Freitag 7. Oktober 2005, 14:37
- Wohnort: Berlin
- Kontaktdaten:
- gerold
- Python-Forum Veteran
- Beiträge: 5555
- Registriert: Samstag 28. Februar 2004, 22:04
- Wohnort: Oberhofen im Inntal (Tirol)
- Kontaktdaten:
Hi Seven!snakeseven hat geschrieben: wie kann ich prüfen, ob eine gemeinsam genutzte Datei bereits vom anderen Prozess geöffnet wurde und somit gerade busy ist?
Die "Try und Error"-Methode dürfte wohl am Einfachsten sein.
lg
Gerold

http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Das dürfte vom Betriebssystem und Dateisystem abhängen. Ich würde mal auf `os.open()` tippen mit den entsprechenden Flags zum exklusiven Öffnen. Allerdings muss das andere Programm das auch getan haben.
Unter Unix löst man das Problem traditionellerweise mit lockfiles. An einem festgelegten Ort wird eine Datei, z.B. /var/lock/myprog.lock angelegt und die eigene Prozessnummer reingeschrieben.
Will nun eine zweite Instanz des Programmes auf die Datei zugreifen, schaut es zuerst nach, ob die Lockdatei /var/lock/myprog.lock existiert. Wenn ja, wird sicherheitshalber nochmal geschaut, ob unter der gespeicherten PID ein Programm läuft, wenn nicht, ist das ursprüngliche Programm abgestürzt oder beendet und das lockfile kann entfernt werden.
Wenn die Datei exisitiert und der Prozess auch, wird nicht auf die Datenbank zugegriffen, da sie im moment gelockt ist.
Will nun eine zweite Instanz des Programmes auf die Datei zugreifen, schaut es zuerst nach, ob die Lockdatei /var/lock/myprog.lock existiert. Wenn ja, wird sicherheitshalber nochmal geschaut, ob unter der gespeicherten PID ein Programm läuft, wenn nicht, ist das ursprüngliche Programm abgestürzt oder beendet und das lockfile kann entfernt werden.
Wenn die Datei exisitiert und der Prozess auch, wird nicht auf die Datenbank zugegriffen, da sie im moment gelockt ist.