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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.