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


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.