Forum: PC-Programmierung python: wie verhindere ich das ein script mehrfach parallell läuft?


von H. R. (hacker_r)


Lesenswert?

Hi
ich habe über pyinstaller ein windows exe generiert!
Wie kann ich verhindern dass mein exe nicht parallel läuft?

von Oliver S. (oliverso)


Lesenswert?

Nicht mehrfach starten?

Oliver

von Sven la (Gast)


Lesenswert?

Durch Anlegen einer temporären Datei deren Vorhandensein beim Start 
geprüft wird vielleicht.

von Rolf M. (rmagnus)


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.

von MaWin (Gast)


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.

von Ingo D. (ingo2011)


Lesenswert?

.. schau dir mal psutil an.
https://pypi.org/project/psutil/
Dqamit schaust Du ob in der Prozess-Liste schon deine Exe vorhanden ist.
Wenn ja, startest du nicht nochmal.

von FS (Gast)


Lesenswert?

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

von Heiner (Gast)


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.

von MaWin (Gast)


Lesenswert?

Heiner schrieb:
> Wenn das lock aktuell ist, schlägt das Löschen fehlt - die Datei ist ja
> geöffnet!

Auf Linux in der Regel nicht.

von Heiner (Gast)


Lesenswert?

MaWin schrieb:
> Auf Linux in der Regel nicht.

H. R. schrieb:
> ich habe über pyinstaller ein windows exe generiert!

Wayne?

von MaWin (Gast)


Lesenswert?

Heiner schrieb:
> Wayne?

Nur so als Information, damit bekannt ist, dass das eine 
plattformabhängige Lösung ist.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.