【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】
没有合适的定时器库,自己编写python定时器code。
#!/usr/bin/python
import os
import sys
import time
import threading
import signal
g_timer_lock = threading.Lock()
g_ticks= []
g_exit = 0
def sig_process(sig, frame):
global g_exit
print 'get signal'
g_exit = 1
def insert_ticks(delta):
global g_ticks
current = int(time.time()) + delta
tick = []
process_flag = 0
if 0 == len(g_ticks):
g_ticks.append([current, delta])
else:
for i in range(len(g_ticks)):
if current < g_ticks[i][0] and not process_flag:
process_flag = 1
tick.append([current, delta])
tick.append(g_ticks[i])
if not process_flag:
tick.append([current, delta])
g_ticks = tick
def add_timer(delta):
g_timer_lock.acquire()
insert_ticks(delta)
g_timer_lock.release()
def timer_process():
while not g_exit:
g_timer_lock.acquire()
current = int(time.time())
process_num = 0
while not process_num:
for i in range(len(g_ticks)):
if g_ticks[i][0] < current:
process_num = 1
break
if process_num:
process_num = 0
print '%d %d ' %(g_ticks[i][0], g_ticks[i][1])
print 'ready to send msg to module'
del g_ticks[i]
else:
process_num = 1
g_timer_lock.release()
time.sleep(1)
def main():
signal.signal(signal.SIGINT, sig_process)
td = threading.Thread(target=timer_process)
td.start()
while not g_exit:
add_timer(1)
add_timer(3)
add_timer(2)
time.sleep(6)
td.join()
if __name__ == '__main__':
main()