python: wie verhindere ich das ein script mehrfach parallell läuft?

#6536585
Lesenswert?

Sven la schrieb:
> Durch Anlegen einer temporären Datei deren Vorhandensein beim Start
> geprüft wird vielleicht.

Eine temporäre Datei alleine reicht in der Regel nicht. Denn wenn das 
Programm mal abstürzt oder durch einen Stromausfall oder was auch immer 
nicht ordnungsgemäß beendet wurde, kann man es danach überhaupt nicht 
mehr starten, weil die Datei noch da ist.
Gast #6536586
Lesenswert?

H. R. schrieb:
> Wie kann ich verhindern dass mein exe nicht parallel läuft?

Warum darf sie das nicht tun?
Kann man diese Restriktion aufheben?
Kann man diesen Umstand vielleicht zur Erkennung der parallelen Instanz 
verwenden?

Sven la schrieb:
> Durch Anlegen einer temporären Datei deren Vorhandensein beim Start
> geprüft wird vielleicht.

Nicht so gut bei einem Crash.
Gast #6537109
Lesenswert?

FS schrieb:
> In anderen Sprachen nutzt man dafür einen Mutex o.ä. Bietet sowas
> Python
> nicht?

Selbstverständlich hat Python so etwas. Wenn der Mutex nur innerhalb 
einer Instanz benötigt wird, würde ich einen Blick auf asyncio.Lock 
werfen. Da es hier aber um mehrere Instanzen geht, delegiert man das 
besser ans Betriebssystem. In dem Fall wäre pywin32.CreateMutex eine 
gute Art, auf die API zuzugreifen.

Sven la schrieb:
> Durch Anlegen einer temporären Datei deren Vorhandensein beim
> Start
> geprüft wird vielleicht.

Das Problem, das die Vorschreiber erkannt haben, nennt sich "stale 
lock". Lösung: Lockfile suchen, falls vorhanden löschen, neu anlegen, 
öffnen und geöffnet halten, bei Programmende schließen und löschen.

Wenn das lock aktuell ist, schlägt das Löschen fehlt - die Datei ist ja 
geöffnet! Ansonsten hat man es mit einem stale lock zu tun, also kann 
man es löschen und ein eigenes lock anlegen. Zieht jemand den Stecker, 
bleibt das Lockfile zwar erhalten, aber nach dem Neustart ist es nicht 
mehr geöffnet und kann gelöscht werden.

Sowohl das Lockfile als auch der Mutex (egal ob vom OS verwaltet oder 
nicht) sind übliche Lösungen für dieses Problem.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren