Ok, wenn ich das richtige Paket habe, sollte es 'python-lockfile' sein.
Das habe ich installiert.
Mal schauen, wie es jetzt weiter geht!
Hmm ... und dann verließen sie ihn ... :K
Programm Kontrolle
Nö, das Paket heißt abl.util. Aber wenn Python-lockfile existiert, dann tut das vll was ähnliches. Doku lesen, sollte ja mitinstalliert sein oder seinbar.
Das Paket abl.util ist in Kubuntu 12.04 nicht vorhanden.
gibt dies aus:
Beihabe ich diessowiegemacht, dabei kommt dann als Meldung
Code: Alles auswählen
print lockfile.__doc__
Ich habe dies dann mal versucht umzusetzen.lockfile.py - Platform-independent advisory file locks.
Requires Python 2.5 unless you apply 2.4.diff
Locking is done on a per-thread basis instead of a per-process basis.
Usage:
>>> lock = FileLock('somefile')
>>> try:
... lock.acquire()
... except AlreadyLocked:
... print 'somefile', 'is locked already.'
... except LockFailed:
... print 'somefile', 'can\'t be locked.'
... else:
... print 'got lock'
got lock
>>> print lock.is_locked()
True
>>> lock.release()
>>> lock = FileLock('somefile')
>>> print lock.is_locked()
False
>>> with lock:
... print lock.is_locked()
True
>>> print lock.is_locked()
False
>>> # It is okay to lock twice from the same thread...
>>> with lock:
... lock.acquire()
...
>>> # Though no counter is kept, so you can't unlock multiple times...
>>> print lock.is_locked()
False
Exceptions:
Error - base class for other exceptions
LockError - base class for all locking exceptions
AlreadyLocked - Another thread or process already holds the lock
LockFailed - Lock failed for some other reason
UnlockError - base class for all unlocking exceptions
AlreadyUnlocked - File was not locked.
NotMyLock - File was locked but not by the current thread/process
Bei
Code: Alles auswählen
lock = FileLock('somefile')
Code: Alles auswählen
lock = FileLock('/home/user/meinfile.py')
Code: Alles auswählen
lock = FileLock('meinfile.py')
NameError: name 'FileLock' is not defined
Mitkann ich das Programm sperren, so daß kein weiterer Programmstart möglich ist.
Und mitgebe ich das Programm wieder frei, vermute ich mal.
PS Nachtrag:
Beim weiteren Testen habe ich festgestellt, daß doch weitere Programmstartś möglich sind.
Da werde ich wohl noch etwas brauchen, bis ich das richtig anwenden kann ...
Code: Alles auswählen
from lockfile import FileLock, AlreadyLocked, LockFailed
PROGRAMM = 'meinProgramm.py'
lock = FileLock(PROGRAMM)
try:
lock.acquire()
except AlreadyLocked:
print PROGRAMM, 'is locked already.'
except LockFailed:
print PROGRAMM, 'can\'t be locked.'
else:
print 'got lock'
Und mit
Code: Alles auswählen
lock.release()
PS Nachtrag:
Beim weiteren Testen habe ich festgestellt, daß doch weitere Programmstartś möglich sind.
Da werde ich wohl noch etwas brauchen, bis ich das richtig anwenden kann ...
Hallo zusammen
lockfile, kann ich aus jetziger Sicht nicht für mein zu startendes Programm nehmen, da ich nicht weiß wie ich anschließend das gesperrte Programm wieder direkt beenden kann. Vielleicht ist dies auch damit möglich, aber die Infos für lockfile sind doch recht mager und für mich daher dann um so schwieriger.
Ich habe dann bei meiner alten Version der Startkontrolle weiter gemacht, die jetzt einsatzbereit, prima funktioniert und sehr einfach in andere Programme integriert werden kann.
Ich poste nun Euch mal mit der Gefahr, für Euch als "hoffnungslos" zu gelten, die verschiedenen Module.
Dieser Eintrag befindet sich am Anfang, des zu startenden Programms.
Als nächstes das Modul prog_control.py, das die Abläufe steuert.
https://gist.github.com/3005223#file_prog_control.py
Als nächstes das Modul gui_start.py, das beim Programmstart für das Dialo-Fenster verantwortlich ist.
https://gist.github.com/3005223#file_gui_start.py
Als nächstes kommt dann noch das Modul gui_break.py, das für das Info-Fenster bei Abbruch verantwortlich ist.
https://gist.github.com/3005223#file_gui_break.py
Zum Schluß noch prog_param.py, hier sind alle Parameter zentral hinterlegt.
https://gist.github.com/3005223#file_prog_param.py
und wird mit 'from prog_param import MeinParameter, MeinAndererParameter, usw.' in den jeweiligen Modulen aufgerufen, die dann dort verwendet werden können.
Ob Kopfschütteln oder hoffnungslos, ich bin damit vorerst sehr zufrieden!
lockfile, kann ich aus jetziger Sicht nicht für mein zu startendes Programm nehmen, da ich nicht weiß wie ich anschließend das gesperrte Programm wieder direkt beenden kann. Vielleicht ist dies auch damit möglich, aber die Infos für lockfile sind doch recht mager und für mich daher dann um so schwieriger.
Ich habe dann bei meiner alten Version der Startkontrolle weiter gemacht, die jetzt einsatzbereit, prima funktioniert und sehr einfach in andere Programme integriert werden kann.
Ich poste nun Euch mal mit der Gefahr, für Euch als "hoffnungslos" zu gelten, die verschiedenen Module.
Dieser Eintrag befindet sich am Anfang, des zu startenden Programms.
Code: Alles auswählen
### Programm-Start und -Kontrolle ###
def startcontrol():
'''
Einstiegsfunktion beim Programmstart.
Es startet das Modul prog_control, das als Kontrollfunktion
für das Starten und Beenden des Programms dient.
'''
start = 'prog_control.py'
path = os.path.dirname(os.path.realpath(os.path.abspath(sys.argv[0])))
subprocess.Popen(['python', '{}/{}'.format(path, start)],)
startcontrol()
https://gist.github.com/3005223#file_prog_control.py
Als nächstes das Modul gui_start.py, das beim Programmstart für das Dialo-Fenster verantwortlich ist.
https://gist.github.com/3005223#file_gui_start.py
Als nächstes kommt dann noch das Modul gui_break.py, das für das Info-Fenster bei Abbruch verantwortlich ist.
https://gist.github.com/3005223#file_gui_break.py
Zum Schluß noch prog_param.py, hier sind alle Parameter zentral hinterlegt.
https://gist.github.com/3005223#file_prog_param.py
und wird mit 'from prog_param import MeinParameter, MeinAndererParameter, usw.' in den jeweiligen Modulen aufgerufen, die dann dort verwendet werden können.
Ob Kopfschütteln oder hoffnungslos, ich bin damit vorerst sehr zufrieden!
Zuletzt geändert von Nobuddy am Donnerstag 28. Juni 2012, 07:27, insgesamt 1-mal geändert.
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Nur mal so als Frage: Was sprach denn gegen das von ddets empfohlene `abl.util`? Damit wäre so ein Locking in zwei Zeilen zu lösen, wenn ich das richtig im Code gesehen habe "damals"...
Ansonsten: Bitte poste so langen und vielen Code doch in einem Pastebin. gist.github.com erlaubt sogar das anlegen eines Gists für viele Dateien, also quasi genau so, wie Du sie jetzt auch hier reingestellt hast.
Ansonsten: Bitte poste so langen und vielen Code doch in einem Pastebin. gist.github.com erlaubt sogar das anlegen eines Gists für viele Dateien, also quasi genau so, wie Du sie jetzt auch hier reingestellt hast.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
assert encoding_kapiert
Ich habe das mal mit gist.github.com versucht und habe hier die Public Clone URL: [url]git://gist.github.com/3005223.git[/url]
Habe das bei gist.github.com vorher noch nicht praktiziert, hoffe aber es funktioniert mit der Public Clone URL.
Oder vielleicht dies https://gist.github.com/3005223.js
Gegen das von deets empfohlene `abl.util` spricht nichts, komme aber einfach nicht mit klar und weiß auch nicht, wie dies eingesetzt wird und wie es funktioniert. Aus der vorhanden Doku, kann ich das auch nicht entnehmen. Die Lösung in zwei Zeilen gegen mein 'Monstrum', keine Frage ... :K
Ich habe wieder ein bisschen mehr dazu gelernt, in dem ich mich mehr mit den Beschreibungen der gängigen Modulen befasst habe. Vieles was ich vorher noch wesentlich umständlicher gemacht hätte, habe ich jetzt schon reduziert ...
Habe das bei gist.github.com vorher noch nicht praktiziert, hoffe aber es funktioniert mit der Public Clone URL.
Oder vielleicht dies https://gist.github.com/3005223.js
Gegen das von deets empfohlene `abl.util` spricht nichts, komme aber einfach nicht mit klar und weiß auch nicht, wie dies eingesetzt wird und wie es funktioniert. Aus der vorhanden Doku, kann ich das auch nicht entnehmen. Die Lösung in zwei Zeilen gegen mein 'Monstrum', keine Frage ... :K
Ich habe wieder ein bisschen mehr dazu gelernt, in dem ich mich mehr mit den Beschreibungen der gängigen Modulen befasst habe. Vieles was ich vorher noch wesentlich umständlicher gemacht hätte, habe ich jetzt schon reduziert ...
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Einfach den Link posten, dann kann man entscheiden ob man das clonen will oder nur im Browser anschaut.Nobuddy hat geschrieben:Ich habe das mal mit gist.github.com versucht und habe hier die Public Clone URL: [url]git://gist.github.com/3005223.git[/url]
Habe das bei gist.github.com vorher noch nicht praktiziert, hoffe aber es funktioniert mit der Public Clone URL.
Oder vielleicht dies https://gist.github.com/3005223.js
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice