Search code examples
pythontimergevent

something like cron (timer) in gevent


How can I make classical timer in gevent?

I'm currently using gevent.spawn_later but is there a way to use core.timer like saying "do callback on interval" just like cron does?

def callback():
    # do something
    print '!'

timer = core.timer(10, callback)
timer.start()

outpout:
0s
10s  !
20s  !
30s  !

Solution

  • On the top of my head, you can use gevent.sleep in a loop:

    import gevent
    import gevent.monkey
    
    gevent.monkey.patch_all()
    
    INTERVAL = 10
    
    def callback():
        # do something
        print "!"
    
    def loop():
        while True:
            gevent.sleep(INTERVAL)
            callback()
    
    gevent.Greenlet.spawn(loop)
    

    Of course, you may put this code in a nice API such as core.timer. But I'll let all the fun for you :)