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

Popular posts from this blog

c# - Validate object ID from GET to POST -

node.js - Custom Model Validator SailsJS -

php - Find a regex to take part of Email -