Timer: Call a function every certain time. If you want to call a function every certain period of time, you must set the Timer again in the function called by the Timer. Timer is a derived class of Thread
Threads in python provide a subset of java thread functions.
#! /usr/bin/env python
from threading import Timer
import time
timer_interval=1
def delayrun():
print 'running'
t=Timer(timer_interval,delayrun)
t.start()while True:
time.sleep(0.1)
print 'main running'
t is a Timer object. Execute the delayrun function after delay one second.
The time.sleep function is used to let the main thread pause for a while before continuing.
Example extension:
Python3 timer task code
import time
import sys
import signal
import datetime
import threading
# Timer
def schedule_update():
t = threading.Timer(0, event_func)
t.setDaemon(True)
t.start()
# Execution function
def event_func():
now_time = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')print(now_time)exec_update()
# update_openvas_dbs_from_cache()
interval_time =delay_time()
t = threading.Timer(interval_time, event_func)
t.setDaemon(True)
t.start()
# Take time
def delay_time():
# now time
now_time = datetime.datetime.now()
# tomorrow time
next_time = now_time + datetime.timedelta(days=+1)
next_year = next_time.date().year
next_month = next_time.date().month
next_day = next_time.date().day
# get tomorrow 00:00
next_time = datetime.datetime.strptime(str(next_year)+"-"+str(next_month)+"-"+str(next_day)+" 00:00:00","%Y-%m-%d %H:%M:%S")
# get secondes
delay_time =(next_time - now_time).total_seconds()return delay_time
def quit_sys(signum, frame):
sys.exit()
# Receive C
if __name__ =="__main__":try:
signal.signal(signal.SIGINT, quit_sys)
signal.signal(signal.SIGTERM, quit_sys)schedule_update()print("schedule_update server starting up...\nHit Ctrl-C to quit.\n")while1:
time.sleep(1)
except Exception as e:print(e)
So far this article on how Python implements the timer function is introduced. For more simple timer examples in Python, please search ZaLou.Cn
Recommended Posts