verzögerte, parallele Ausführung in Schleife (threading.Timer??)
Verfasst: Mittwoch 27. April 2016, 21:34
Hallo Zusammen,
zuerst mal muss ich mich im Vorfeld entschuldigen, falls man meiner Ausdrucksweise erkennt, dass ich noch ganz schön grün hinter den Ohren bin, was Python betrifft, aber ich habe erst angefangen mich fürs Programmieren & Co. zu interessieren, nachdem ich mir einen Himbeerkuchen geholt habe.
Mein Problem ist folgendes:
Ich habe ein Python Script (welches prinzipiell perfekt läuft), das ich nun allerdings so erweitern möchte, dass ein weiterer Befehl zeitgleich (also das Script soll nicht warten, bis er fertig ist) und mit einer gewissen Verzögerung ausgeführt werden soll.
Hintergrund ist eine Foto-Box, die ich mir gebastelt habe, und in die ich nun noch einen LED-Lampen-Blitz einbauen möchte.
Da die Auslösung des Fotos (mittels gphoto) ca. 1,5sek dauert, wollte ich eben um diese 1,5 sek zeitverzögert den Befehl absetzen, dass die LED-Lampen für ca. 0,5sek auf volle Helligkeit gehen.
Bisher hab ich mit "threading.Timer" genau das geschafft, was ich wollte, allerdings hab ich dabei das Problem, dass der Threading-Befehl nur einmal ablaufen kann, ich aber am Ende des Scripts dieses per Knopfdruck wieder ablaufen lasse...
Hat einer eine Idee, wie ich evtl weiterkomme? Ist Threading hier richtig? Gibt es eventuell eine andere Möglichkeit einen definierten Befehl mit einer Verzögerung von X Sekunden ablaufen zu lassen, ohne dass das Skript auf das Beenden des Befehls wartet?
Code-Schnipsel kann ich natürlich gerne durchgeben, falls das alles zu chaotisch war...
Der Befehl den ich für threading.Timer definiert hatte lautet:
>def blitz():
> SPOT_1.ChangeDutyCycle(100)
> SPOT_2.ChangeDutyCycle(100)
> time.sleep(0.5)
> SPOT_1.stop()
> SPOT_2.stop()
>t = threading.Timer(1,5, blitz)
gestartet wurde der Thread dann in der entsprechenden Stelle im Skript mit
>t.start()
Da es aber wie gesagt in SChleife läuft, bekomm ich nach dem ersten (geglückten) Durchlauf eben die Fehlermeldung
"RuntimeError: threads can only be started once"
Vielleicht hat jemand eine Idee und versteht was ich vorhabe...Bin leider noch zu doof um die Möglichkeiten von Python komplett zu verstehen, aber ich bin ehrgeizig und hungrig
Vielen Dank und schönen Abend noch!
zuerst mal muss ich mich im Vorfeld entschuldigen, falls man meiner Ausdrucksweise erkennt, dass ich noch ganz schön grün hinter den Ohren bin, was Python betrifft, aber ich habe erst angefangen mich fürs Programmieren & Co. zu interessieren, nachdem ich mir einen Himbeerkuchen geholt habe.
Mein Problem ist folgendes:
Ich habe ein Python Script (welches prinzipiell perfekt läuft), das ich nun allerdings so erweitern möchte, dass ein weiterer Befehl zeitgleich (also das Script soll nicht warten, bis er fertig ist) und mit einer gewissen Verzögerung ausgeführt werden soll.
Hintergrund ist eine Foto-Box, die ich mir gebastelt habe, und in die ich nun noch einen LED-Lampen-Blitz einbauen möchte.
Da die Auslösung des Fotos (mittels gphoto) ca. 1,5sek dauert, wollte ich eben um diese 1,5 sek zeitverzögert den Befehl absetzen, dass die LED-Lampen für ca. 0,5sek auf volle Helligkeit gehen.
Bisher hab ich mit "threading.Timer" genau das geschafft, was ich wollte, allerdings hab ich dabei das Problem, dass der Threading-Befehl nur einmal ablaufen kann, ich aber am Ende des Scripts dieses per Knopfdruck wieder ablaufen lasse...
Hat einer eine Idee, wie ich evtl weiterkomme? Ist Threading hier richtig? Gibt es eventuell eine andere Möglichkeit einen definierten Befehl mit einer Verzögerung von X Sekunden ablaufen zu lassen, ohne dass das Skript auf das Beenden des Befehls wartet?
Code-Schnipsel kann ich natürlich gerne durchgeben, falls das alles zu chaotisch war...
Der Befehl den ich für threading.Timer definiert hatte lautet:
>def blitz():
> SPOT_1.ChangeDutyCycle(100)
> SPOT_2.ChangeDutyCycle(100)
> time.sleep(0.5)
> SPOT_1.stop()
> SPOT_2.stop()
>t = threading.Timer(1,5, blitz)
gestartet wurde der Thread dann in der entsprechenden Stelle im Skript mit
>t.start()
Da es aber wie gesagt in SChleife läuft, bekomm ich nach dem ersten (geglückten) Durchlauf eben die Fehlermeldung
"RuntimeError: threads can only be started once"
Vielleicht hat jemand eine Idee und versteht was ich vorhabe...Bin leider noch zu doof um die Möglichkeiten von Python komplett zu verstehen, aber ich bin ehrgeizig und hungrig

Vielen Dank und schönen Abend noch!