python编程(一种自定义定时器的写法)

来源:互联网 发布:淘宝信用支付怎么开通 编辑:程序博客网 时间:2024/05/20 07:36

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】

  没有合适的定时器库,自己编写python定时器code。

#!/usr/bin/pythonimport osimport sysimport timeimport threadingimport signalg_timer_lock = threading.Lock()g_ticks= []g_exit = 0def sig_process(sig, frame):global g_exitprint 'get signal'g_exit = 1def insert_ticks(delta):global g_tickscurrent = int(time.time()) + deltatick = []process_flag = 0if 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 = 1tick.append([current, delta])tick.append(g_ticks[i])if not process_flag:tick.append([current, delta])g_ticks = tickdef 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 = 0while not process_num:for i in range(len(g_ticks)):if g_ticks[i][0] < current:process_num = 1breakif process_num:process_num = 0print '%d %d ' %(g_ticks[i][0], g_ticks[i][1])print 'ready to send msg to module'del g_ticks[i]else:process_num = 1g_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()


原创粉丝点击