Python程序中如何启动2个定时器
Python how to start 2 timers in the program
我有一个带有机器人的程序,在工作期间,它还应该每 10 分钟保存一次订单列表,以及每 1 分钟保存一次日志。部分代码如下:
timer1 = threading.Timer(600, save_orders_list)
timer2 = threading.Timer(60, save_log)
bot.infinity_polling(timeout = 10, long_polling_timeout = 5)
timer1.start()
timer1.join()
timer2.start()
timer2.join()
time.sleep(57600)
Here 建议将 join() 添加到每个计时器,但保存功能仍然独立于计时器正确执行。
遇到这种情况怎么办?
有多种选择可以实现您想要的,最基本的示例是使用递归和睡眠功能,例如
import sched, time
def save_log():
#your code to save logs
time.sleep(60) # 1 min
save_log() #after waiting for 1 min call the function again to save logs
或者你可以使用带时间函数的无限循环
while True:
save_log()
time.sleep(60) #wait for 1 min before next iteration
以上两种方法不是实现目标的巧妙方法,下面是处理此用例的另一种巧妙且更先进的方法
s = sched.scheduler(time.time, time.sleep) #define a scheduler
def save_log(sc):
#your code to save log
sc.enter(60, 1, save_log, (sc,)) #schedule the next execution 1 min
s.enter(60, 1, save_log, (s,)) #Set first time schedule, 1 min
s.run()
您可以从 python 官方文档 here
中查看更多调度程序以满足您的要求
我有一个带有机器人的程序,在工作期间,它还应该每 10 分钟保存一次订单列表,以及每 1 分钟保存一次日志。部分代码如下:
timer1 = threading.Timer(600, save_orders_list)
timer2 = threading.Timer(60, save_log)
bot.infinity_polling(timeout = 10, long_polling_timeout = 5)
timer1.start()
timer1.join()
timer2.start()
timer2.join()
time.sleep(57600)
Here 建议将 join() 添加到每个计时器,但保存功能仍然独立于计时器正确执行。
遇到这种情况怎么办?
有多种选择可以实现您想要的,最基本的示例是使用递归和睡眠功能,例如
import sched, time
def save_log():
#your code to save logs
time.sleep(60) # 1 min
save_log() #after waiting for 1 min call the function again to save logs
或者你可以使用带时间函数的无限循环
while True:
save_log()
time.sleep(60) #wait for 1 min before next iteration
以上两种方法不是实现目标的巧妙方法,下面是处理此用例的另一种巧妙且更先进的方法
s = sched.scheduler(time.time, time.sleep) #define a scheduler
def save_log(sc):
#your code to save log
sc.enter(60, 1, save_log, (sc,)) #schedule the next execution 1 min
s.enter(60, 1, save_log, (s,)) #Set first time schedule, 1 min
s.run()
您可以从 python 官方文档 here
中查看更多调度程序以满足您的要求