Hallo,
ich habe zwei Skripte, die einen Befehl ausfuehren:
os.system(Befehl)
Wie kann ich dafuer sorgen, dass nur ein Skript den befehl ausfuehrt. Also Befehl solange geblocked ist, bis skript1 fertig ist. Und dann kann skript2 senden...
mit thread, semaphoren...?
Oder kann ich pruefen, dass deiser thread gerade ausgefuehrt wird und solange warte bis er nicht mehr ausgefuehrt wird?
Wie geht das?
Danke fuer Tipps,
Patrick
2 Skripte laufen, es soll nur ein programm gestartet werden.
hallo,
ich verwende linux. die datei, die ich ausfuehre ist unter linux... das geht mit os.system(/home/.../Datei). ..
Die anwendungen starten beide den selben Befehl. Ich haette nur gerne als Sicherheit eingebaut, dass Anwendung B solange wartet bis sie den Befehlt ausfuehrt, wie A ihn verwendet und andersrum...
Patrick
ich verwende linux. die datei, die ich ausfuehre ist unter linux... das geht mit os.system(/home/.../Datei). ..
Die anwendungen starten beide den selben Befehl. Ich haette nur gerne als Sicherheit eingebaut, dass Anwendung B solange wartet bis sie den Befehlt ausfuehrt, wie A ihn verwendet und andersrum...
Patrick
im forum wurde einmal eine möglichkeit besprochen wie
man kontrollieren kann ob ein programm läuft
müsste mit deinen programm auch gehen.
http://www.python-forum.de/viewtopic.ph ... mm+l%E4uft
man kontrollieren kann ob ein programm läuft
müsste mit deinen programm auch gehen.
http://www.python-forum.de/viewtopic.ph ... mm+l%E4uft
kann man es auch mit threads machen?
So sieht ein Modul aus:
Ich habe eine def start... gemacht um das Modul als thread starten zu koennen.
Anderes Modul, dass dieses als neuen thread started:
in der class oben verwende ich dann:
und release...
wenn ich mein skript starte sehe ich aber nichts. Weiss einer worna das liegt?
oder kann man die ausgaben nicht sehen bei thread=start_new... was kann man da machen?
Patrick
Edit (Leonidas): Code in Python-Tags gesetzt. Die meiste Zeit sitze ich im Forum rum, um aus Code-Tags Python-Tags zu machen oder überhaupt Code in irgendwelche Tags zu setzen. Warum liest denn keiner die "Vor dem Posten lesen" Threads? patrickk, könntest du das nächste mal darauf achten, dass die deinen Quellcode in die entsprechenden Tags setzt?
So sieht ein Modul aus:
Code: Alles auswählen
class DeliveryServer:
def NEWMSG(self, params):
..............
def start(sleeptime,lock):
port = 8888
server = SimpleXMLRPCServer.SimpleXMLRPCServer(("", port))
server.register_instance(DeliveryServer())^server.serve_forever()
Anderes Modul, dass dieses als neuen thread started:
Code: Alles auswählen
import sys
import thread
sys.path.insert(0,"/home/test/")
import LCDeliveryXMLRPCReceiver
lock=thread.allocate_lock()
thread.start_new_thread(LCDeliveryXMLRPCReceiver.start,(2,lock))
Code: Alles auswählen
lock.acquire()
wenn ich mein skript starte sehe ich aber nichts. Weiss einer worna das liegt?
oder kann man die ausgaben nicht sehen bei thread=start_new... was kann man da machen?
Patrick
Edit (Leonidas): Code in Python-Tags gesetzt. Die meiste Zeit sitze ich im Forum rum, um aus Code-Tags Python-Tags zu machen oder überhaupt Code in irgendwelche Tags zu setzen. Warum liest denn keiner die "Vor dem Posten lesen" Threads? patrickk, könntest du das nächste mal darauf achten, dass die deinen Quellcode in die entsprechenden Tags setzt?
Könntest Du Deine Codebeispiele bitte in (python)-Tags packen. Ohne die Einrückung ist es schwer lesbar und kann bei etwas komplexeren Quelltexten schnell zum Ratespiel werden.
Mal ernsthaft: Welche Ausgaben bitteschön? In Deinem Code-Schnipsel waren keine Ausgaben. Grundsätzlich kann man auch in Threads ``print`` Anweisungen benutzen.
Aber ich weiss nicht so recht ob Threads überhaupt Dein Problem lösen. Ich dachte Du willst das Skript selbst mehrmals starten und nicht mehrere Threads innerhalb des selben Skripts!?
Falls es doch mehrere Threads in einem Skript sind, die ein bestimmtes externes Programm nicht mehrmals zur gleichen Zeit starten sollen, dann würde ich einen extra Thread empfehlen, der über eine Queue Aufträge zum starten von den anderen entgegennimmt. Dann solltest Du aber das `threading` Modul benutzen, das ist etwas komfortabler und bietet etwas ausgefeiltere Sperrmethoden.
Du hast Die Augen geschlossen?patrickk hat geschrieben:wenn ich mein skript starte sehe ich aber nichts. Weiss einer worna das liegt?
Mal ernsthaft: Welche Ausgaben bitteschön? In Deinem Code-Schnipsel waren keine Ausgaben. Grundsätzlich kann man auch in Threads ``print`` Anweisungen benutzen.
Aber ich weiss nicht so recht ob Threads überhaupt Dein Problem lösen. Ich dachte Du willst das Skript selbst mehrmals starten und nicht mehrere Threads innerhalb des selben Skripts!?
Falls es doch mehrere Threads in einem Skript sind, die ein bestimmtes externes Programm nicht mehrmals zur gleichen Zeit starten sollen, dann würde ich einen extra Thread empfehlen, der über eine Queue Aufträge zum starten von den anderen entgegennimmt. Dann solltest Du aber das `threading` Modul benutzen, das ist etwas komfortabler und bietet etwas ausgefeiltere Sperrmethoden.
- jens
- Python-Forum Veteran
- Beiträge: 8502
- Registriert: Dienstag 10. August 2004, 09:40
- Wohnort: duisburg
- Kontaktdaten:
Ich hab es so verstanden, das sein Programm nicht mehrmals gestartet werden soll... Da aber ein Server auf Port 8888 gestartet wird, kann eh nicht's passieren, denn beim zweiten Aufruf ist dieser Port ja vom ersten belegt...
Beim socket erstellen noch ein try-except einbauen und dann eine Meldung ausgeben, das der Server schon läuft...
@Leonidas: Das keiner die python-Tags benutzt wird daran liegen, das im default-Boardstyle, die Buttons nicht da sind!
Beim socket erstellen noch ein try-except einbauen und dann eine Meldung ausgeben, das der Server schon läuft...
@Leonidas: Das keiner die python-Tags benutzt wird daran liegen, das im default-Boardstyle, die Buttons nicht da sind!
Hallo,
danke fuer die Hilfe. In der Klasse wird die Datei aufgerufen, die nicht zweimal gestartet werden soll. Dort sind auch print ausgaben... aber sehen tue ich so nichts. Auch wenn ich einen Fehler mache wird dies nicht angezeigt, sondern er bricht ab und wartet auf eine neue Message... server.serve forever...
Ich habe noch ein anderes python Modul (nicht port8888), der das selbe programm aufruft. Hier dachte ich koennte ich ein neues Skript erstellen, dass das simplexmlserver modul als thread started und das andere als anderen thread startet und dann mit[/b][/size]
Es kann in diesem Fall aber auch einfacher gehen. Gibt es einen Befehl um zu schauen, ob eine Datei in einem Ordner ist? Das muss fuer das Tool angelegt werden. Solange koennte ich das Skript ja ganz einfach blockieren und es passiert nichts...
Trotzdem waere ich dankbar wenn mir jmd sagen koennte warum ich in dem server tool keine Ausgaben bekomme. Wenn statt def die Zeilen unten so stehen, dass man das Skript direkt startet sehe ich anzeigen. Aber Fehlermeldungen bekomme ich nie angezeigt. Woran liegt das? Sorry, habe noch nicht viel mit Klassen gemacht..
Und ab jetzt gibt es den Code in den tags...
[/b]
Patrick
danke fuer die Hilfe. In der Klasse wird die Datei aufgerufen, die nicht zweimal gestartet werden soll. Dort sind auch print ausgaben... aber sehen tue ich so nichts. Auch wenn ich einen Fehler mache wird dies nicht angezeigt, sondern er bricht ab und wartet auf eine neue Message... server.serve forever...
Ich habe noch ein anderes python Modul (nicht port8888), der das selbe programm aufruft. Hier dachte ich koennte ich ein neues Skript erstellen, dass das simplexmlserver modul als thread started und das andere als anderen thread startet und dann mit
Code: Alles auswählen
thread.start_new_thread(LCDeliveryXMLRPCReceiver.start,(2,lock))
#starten der beiden versch. threads. hier nur einer
#in Modul:
lock.acquire()
sendXML.sendXML(title,link,curtime)
#dort ist das programm enthalten dass nicht gleichzeitet zwei dinge schicken soll
lock.release()
Es kann in diesem Fall aber auch einfacher gehen. Gibt es einen Befehl um zu schauen, ob eine Datei in einem Ordner ist? Das muss fuer das Tool angelegt werden. Solange koennte ich das Skript ja ganz einfach blockieren und es passiert nichts...
Trotzdem waere ich dankbar wenn mir jmd sagen koennte warum ich in dem server tool keine Ausgaben bekomme. Wenn statt def die Zeilen unten so stehen, dass man das Skript direkt startet sehe ich anzeigen. Aber Fehlermeldungen bekomme ich nie angezeigt. Woran liegt das? Sorry, habe noch nicht viel mit Klassen gemacht..
Und ab jetzt gibt es den Code in den tags...
Code: Alles auswählen
if os.path.isfile('/home/name/Send/*'):
#das geht leider nicht. Wie kann ich schauen, ob da egal was fuer eine Datei in dem Ordner ist?
Patrick
Code: Alles auswählen
from glob import glob
if len(glob('PFAD/DORT/HIN/*.*)) > 0:
print 'da ist was drin'
Gruß, Johannes
[b][color=red]ascii stupid question,
get stupid ansii[/color][/b]
[url]http://www.hehejo.de[/url]
[b][color=red]ascii stupid question,
get stupid ansii[/color][/b]
[url]http://www.hehejo.de[/url]
- jens
- Python-Forum Veteran
- Beiträge: 8502
- Registriert: Dienstag 10. August 2004, 09:40
- Wohnort: duisburg
- Kontaktdaten:
Das war doch eine Lösung in dem Thread, den rogen dir schon gezeigt hatte:patrickk hat geschrieben:Gibt es einen Befehl um zu schauen, ob eine Datei in einem Ordner ist?
http://www.python-forum.de/viewtopic.php?p=9599#9599
Mit glob würde ich da nicht arbeiten!
hi, danke fuer die Hinweise.
Ich lege nur Dateien in einen Tmp Ordner. Der Ordner muss bestehen bleiben.
Hab es jetzt so gemacht:
Wenn noch jmd etwas zu den Problemen mit der Klasse weiss?
Patrick
Ich lege nur Dateien in einen Tmp Ordner. Der Ordner muss bestehen bleiben.
Hab es jetzt so gemacht:
Code: Alles auswählen
import os
import time
tmp = os.listdir('/home/name/Send/')
while tmp !=[]:
time.sleep(2)
tmp = os.listdir('/home/name/Send/')
Patrick
- jens
- Python-Forum Veteran
- Beiträge: 8502
- Registriert: Dienstag 10. August 2004, 09:40
- Wohnort: duisburg
- Kontaktdaten:
Schau dir dazu das Modul http://www.python.org/doc/current/lib/m ... pfile.html an!!!patrickk hat geschrieben:Ich lege nur Dateien in einen Tmp Ordner.