我有一个django应用程序,它有一个python AP调度器运行一个特定的作业。我希望每周运行一次作业。可能会有后续的应用程序部署,我不希望每次发生这种情况时调度程序都重置作业。是否有任何方法可以提供过去的开始日期或检查自上次运行以来是否已经过去了一周,以确保计划程序作业独立于部署运行。
调度程序代码-
from apscheduler.schedulers.background import BackgroundScheduler
scheduler = BackgroundScheduler()
scheduler.add_job(send_weekly_email, 'interval', weeks=1)
scheduler.start()
1条答案
按热度按时间of1yzvn41#
这里的关键挑战是您的
BackgroundScheduler
不能跨部署/重启持久化作业信息。您可以使用APScheduler
的内置作业存储,如SQLAlchemyJobStore
,在不同的会话中持久化作业。但是,如果在调度最后一个作业后不到一周就进行部署,这将导致作业发送的频率高于预期,那么这种方法将无法处理这种情况。为此,我建议单独跟踪最后发送电子邮件的日期,例如在数据库或简单文件中。然后,当作业即将执行时,它可以检查自发送最后一封电子邮件以来是否已经过去了一周。如果没有,它将跳过执行。
请记住将“/path/to/last_sent.txt”替换为适合您系统的路径。
此外,考虑使用
logging
模块而不是print
用于实际应用程序。它将帮助您跟踪何时以及为什么发送电子邮件(或不发送)。