Prüfen, ob Datei bereits von anderem Prozess geöffnet ?

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
snakeseven
User
Beiträge: 405
Registriert: Freitag 7. Oktober 2005, 14:37
Wohnort: Berlin
Kontaktdaten:

Mittwoch 7. Dezember 2005, 20:23

Hallo,
wie kann ich prüfen, ob eine gemeinsam genutzte Datei bereits vom anderen Prozess geöffnet wurde und somit gerade busy ist ?
Seven
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Mittwoch 7. Dezember 2005, 22:11

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?
Hi Seven!

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.
BlackJack

Donnerstag 8. Dezember 2005, 01:31

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.
Joghurt
User
Beiträge: 877
Registriert: Dienstag 15. Februar 2005, 15:07

Donnerstag 8. Dezember 2005, 17:05

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.
Antworten