Equivalent of setInterval in python

前端 未结 4 1759
予麋鹿
予麋鹿 2020-12-13 10:21

I have recently posted a question about how to postpone execution of a function in Python (kind of equivalent to Javascript setTimeout) and it turns out to be a

相关标签:
4条回答
  • 2020-12-13 10:57

    Your solution looks fine to me.

    There are several ways to communicate with threads. To order a thread to stop, you can use threading.Event(), which has a wait() method that you can use instead of time.sleep().

    stop_event = threading.Event()
    ...
    stop_event.wait(1.)
    if stop_event.isSet():
        return
    ...
    

    For your thread to exit when the program is terminated, set its daemon attribute to True before calling start(). This applies to Timer() objects as well because they subclass threading.Thread. See http://docs.python.org/library/threading.html#threading.Thread.daemon

    0 讨论(0)
  • 2020-12-13 10:58

    Maybe a bit simpler is to use recursive calls to Timer:

    from threading import Timer
    import atexit
    
    class Repeat(object):
    
        count = 0
        @staticmethod
        def repeat(rep, delay, func):
            "repeat func rep times with a delay given in seconds"
    
            if Repeat.count < rep:
                # call func, you might want to add args here
                func()
                Repeat.count += 1
                # setup a timer which calls repeat recursively
                # again, if you need args for func, you have to add them here
                timer = Timer(delay, Repeat.repeat, (rep, delay, func))
                # register timer.cancel to stop the timer when you exit the interpreter
                atexit.register(timer.cancel)
                timer.start()
    
    def foo():
        print "bar"
    
    Repeat.repeat(3,2,foo)
    

    atexit allows to signal stopping with CTRL-C.

    0 讨论(0)
  • 2020-12-13 11:04

    this class Interval

    class ali:
        def __init__(self):
            self.sure = True;
    
        def aliv(self,func,san):
            print "ali naber";
            self.setInterVal(func, san);
    
        def setInterVal(self,func, san):
    
            # istenilen saniye veya dakika aralığında program calışır. 
            def func_Calistir():
    
                func(func,san);  #calışıcak fonksiyon.
            self.t = threading.Timer(san, func_Calistir)
            self.t.start()
            return self.t
    
    
    a = ali();
    a.setInterVal(a.aliv,5);
    
    0 讨论(0)
  • 2020-12-13 11:09

    Maybe these are the easiest setInterval equivalent in python:

     import threading
    
     def set_interval(func, sec):
        def func_wrapper():
            set_interval(func, sec) 
            func()  
        t = threading.Timer(sec, func_wrapper)
        t.start()
        return t
    
    0 讨论(0)
提交回复
热议问题