如何使用独立于程序运行开始时间的apscheduler精确地每一小时执行一次python函数



我有一个函数,使用threading模块每小时执行一次。但是我遇到了这个问题,

即,函数在几个小时后没有运行,比如在 10 - 12 小时后(这个时间是不同的(

def update_df():
df = pd.read_sql(sql_query, connections['DB2'])
threading.Timer(60*60*1, update_df).start()
update_df()

问题:

什么是
  1. 最佳实践,实现此功能,使其 应该每 IST 小时运行一次(不是系统时间(?
  2. 为什么threading模块无法正常工作(是否有任何内置模块可以完成相同的工作(?

编辑-1:

  • 问题-1 已解脱
  • 问题 2 需要更高的可见性

扩展@Harley的答案,

您需要使用trigger='cron'而不是'interval'来每小时执行一次

公文

interval:当您想在固定的小时/分钟/秒数后运行函数时,应该使用此功能,而不管 日/月/年。

cron:当您想在特定日/月/年的特定小时/分钟/秒运行函数时,应使用此功能。

from apscheduler.schedulers.background import BackgroundScheduler
scheduler = BackgroundScheduler()
scheduler.configure(timezone='Asia/Kolkata')
scheduler.add_job(method, trigger='cron', hour='*') # Execute every hour independent of execution time(i.e., 1:00:00, 2:00:00, so on..)
scheduler.add_job(method_1, 'interval', minutes=30) # Execute on every 30 minutes depends program execution time
scheduler.start()

要停止调度程序,请使用.remove_all_jobs()

Ex: scheduler.remove_all_jobs()

你可以使用python apscheduler。

from apscheduler.schedulers.background import BackgroundScheduler
scheduler = BackgroundScheduler()
scheduler.configure(timezone='subcontinent/city')
scheduler.add_job(method-1, 'interval', seconds=10)
scheduler.add_job(method-2, 'interval', minutes=30)
scheduler.add_job(method-3, 'interval', hours=1)
//the below shceduler run mon-thu and sun on every o,15,30 and 45 minutes of each hour
scheduler.add_job(method, 'cron', minute='0,15,30,45', day_of_week='mon-thu,sun')
scheduler.start()

相关内容

  • 没有找到相关文章

最新更新