nur eine Instanz eines Skripts

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.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

lunar hat geschrieben:Ich würde einen Server auf einem beim Start zufällig ausgewählten, freien Port auf 127.0.0.1 verwenden. Die Portnummer schreibt das Programm in eine Datei in "~". Beim Start liest das Programm den Port aus der Datei, verbindet sich zum Server und sendet eine definierte Nachricht. Falls eine ebenfalls definierte, positive Antwort zurück kommt, läuft das Programm bereits, ansonsten läuft es nicht.
Man sollte dabei überlegen, ob verschiedene user das gleiche Programm starten dürfen oder nicht. Firefox kann etwa jeder User nur einmal starten aber es darf mehrmals im System laufen.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
jbs
User
Beiträge: 953
Registriert: Mittwoch 24. Juni 2009, 13:13
Wohnort: Postdam

Ich habs mal ein wenig aufgeräumt. Den XMLPRC Server habe ich rausgenommen, dafür wollte ich eine eigene Klasse schreiben.

Mal der aktuelle Stand: http://paste.pocoo.org/compare/165476/165474/

Dadurch verkürzt es sich auf:

Code: Alles auswählen

from rununique import RunUnique
from time import sleep

with RunUnique() as unique:
    if unique:
        for i in range(10):
            print i
            sleep(1)
    else:
        print 'x'
[url=http://wiki.python-forum.de/PEP%208%20%28%C3%9Cbersetzung%29]PEP 8[/url] - Quak!
[url=http://tutorial.pocoo.org/index.html]Tutorial in Deutsch[/url]
Benutzeravatar
jbs
User
Beiträge: 953
Registriert: Mittwoch 24. Juni 2009, 13:13
Wohnort: Postdam

Zum XMLRPC: Würdet ihr eher einen zufälligen Port nehmen und den dann wie beim PID abpeichern oder den Port aus dem Namen der Applikation generieren, wie es bisher der Fall war?
[url=http://wiki.python-forum.de/PEP%208%20%28%C3%9Cbersetzung%29]PEP 8[/url] - Quak!
[url=http://tutorial.pocoo.org/index.html]Tutorial in Deutsch[/url]
derdon
User
Beiträge: 1316
Registriert: Freitag 24. Oktober 2008, 14:32

Den Namen der App als Salz für den SHA1-Hash der PID + zufälliger Zahl nehmen und von dessen hexdigest-Wert die ersten 4 Ziffern extrahieren

8)
Benutzeravatar
jbs
User
Beiträge: 953
Registriert: Mittwoch 24. Juni 2009, 13:13
Wohnort: Postdam

Code: Alles auswählen

''.join(c for c in hashlib.sha1('myapp').hexdigest() if c.isdigit())[:4]
so?
[url=http://wiki.python-forum.de/PEP%208%20%28%C3%9Cbersetzung%29]PEP 8[/url] - Quak!
[url=http://tutorial.pocoo.org/index.html]Tutorial in Deutsch[/url]
Benutzeravatar
jbs
User
Beiträge: 953
Registriert: Mittwoch 24. Juni 2009, 13:13
Wohnort: Postdam

Oh, hab die zufällige Zahl überlesen. Dann muss ich das ganze wieder abspeichern.... Dann kann ich das ja gleich über Sockets machen.


Edit: ich habe gerade festgestellt, dass der Aufruf durch xmlrpc extrem verlangsamt wird, da relativ lange auf eine Antwort garauf gewartet wird. :(
[url=http://wiki.python-forum.de/PEP%208%20%28%C3%9Cbersetzung%29]PEP 8[/url] - Quak!
[url=http://tutorial.pocoo.org/index.html]Tutorial in Deutsch[/url]
Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

Ich habe vor Ewigkeiten mal etwas mit Sockets gemacht. Falls es Dich interessiert, kann ich das mal posten.
MfG
HWK
derdon
User
Beiträge: 1316
Registriert: Freitag 24. Oktober 2008, 14:32

jbs hat geschrieben:Oh, hab die zufällige Zahl überlesen. Dann muss ich das ganze wieder abspeichern.... Dann kann ich das ja gleich über Sockets machen.
Ich habe nicht damit gerechnet, dass du diesen Vorschlag ernst nehmen würdest ...
Benutzeravatar
jbs
User
Beiträge: 953
Registriert: Mittwoch 24. Juni 2009, 13:13
Wohnort: Postdam

HWK hat geschrieben:Ich habe vor Ewigkeiten mal etwas mit Sockets gemacht. Falls es Dich interessiert, kann ich das mal posten.
MfG
HWK
Ja gerne.

@derdon: Du Schlingel :(
[url=http://wiki.python-forum.de/PEP%208%20%28%C3%9Cbersetzung%29]PEP 8[/url] - Quak!
[url=http://tutorial.pocoo.org/index.html]Tutorial in Deutsch[/url]
Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

So, hier ist der Code. Ist wie gesagt schon uralt. Da ist sicher einiges überholungsbedürftig, z.B. die fehlenden Exceptions nach except, aber Du willst ja auch noch etwas zu tun haben. Auf jeden Fall funktionierte es bei mir.
MfG
HWK
Antworten