python - How to create a trigger with threading.Timer? -
i discover python last month, i'm not programmer @ all. i'm trying create own software electronic instrument. need create trigger call function each 0.04 ms (if it's possible). tried this:
in first file metronome.py:
class metronome: def __init__(self, clip, _matrix): self.clip = clip self._matrix = _matrix self.inc = -1 def _trigger(self): self.inc = self.inc + 1 self._matrix.get_button(self.inc, 1).send_value(green_full) t = threading.timer(1.0, self._trigger).start()
in second file , new class:
i import previous function with:
from metronome.py import metronome
i call previous function with:
metronome(self.clip, self._matrix)._trigger()
in _trigger
function, self._matrix.get_button(self.inc, 1).send_value(green_full)
allows me send led feedback on instrument interface. when launch program, first led feedback on instrument. however, others take more 1 second setup , of them appear @ same time. also, after each feedback time of next 1 increased (like 5/10 seconde). don't it!
apart other issues on how metronome
class called (see comments above), think _trigger
method should more like:
def _trigger(self): while true: self.inc += 1 self._matrix.get_button(self.inc, 1).send_value(green_full) if (whatever_exit_condition): break time.sleep(time_interval_in_seconds)
if there's no exit condition, remove if
block.
in few words: avoid creating new timer on every cycle. instead, create 1 timer only, when start calling method:
t = threading.timer(1.0, metronome(self.clip, self._matrix)._trigger).start()
here working example on how use timer:
#! /usr/bin/env python sys import argv import time import threading def f(): retry = 0 while true: print "f, retry=", retry retry += 1 if retry > 3: break time.sleep(2) print ("f exited") if __name__ == "__main__": if len(argv) <= 1: print "usage: %s num" % (argv[0],) exit(1) t = threading.timer(1.0, f) t.start() in range(int(argv[1])): time.sleep(1) print "main, i=",
if run with:
python timer.py 10
it outputs:
f, retry= 0 main, i= 0 main, i= 1 f, retry= 1 main, i= 2 main, i= 3 f, retry= 2 main, i= 4 main, i= 5 f, retry= 3 f exited main, i= 6 main, i= 7 main, i= 8 main, i= 9
basicallly main thread alive , thing, while timer thread created via timer once , keeps doing bit (e.g. signal user in case), limited number of times (3), sleeping between each cycle. hope clearer now.
Comments
Post a Comment