微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

APScheduler跳过作业并在其他时间运行

如何解决APScheduler跳过作业并在其他时间运行

我们有运行的Azure Kubernetes群集(在DEV,TST,PRD上每个阶段一个),在这里我们需要几个Python脚本来定期运行,这就是我们使用APScheduler(3.6.0)的目的。使用认的内存中作业存储。

但是,几天前,我发现APScheduler的行为与预期不同。它发生在所有三个阶段:

  • 一个特定的工作被设置为每小时0分钟和30分钟运行,自2020年3月27日起已停止在21:30到00:00之间运行。
  • 同一项工作运行的时间很奇怪,例如经常在〜:15和:45。
  • 按计划每5分钟运行一次的作业就会跳过。日志记录显示“正在启动作业”,但随后没有说明以下内容,它应该:作业“ x_job(触发:cron [month ='',day ='',day_of_week ='',hour ='',minutes ='0,5,10,15,20,25,30,35,40,45,50,55'],下一次运行:2020-08-18 10:35:00 UTC)”已成功执行。发生在某个时刻,同时触发两次运行,但不一定触发下一次运行。

已采取步骤但未取得预期结果:

增加process_pool_workers和thread_pool_max_workers的数量并设置misfire_grace_time:

执行器 thread_pool_max_workers:50 process_pool_max_workers:20 作业认值 job_defaults_coalesce:是的 job_defaults_max_instances:3 misfire_grace_time:120

  • 在调度程序和add_jobs中设置timezone ='UTC'。 scheduler = BlockingScheduler(executors = executors,job_defaults = job_defaults,timezone ='UTC') scheduler.add_job(launch_profile_job,crontrigger.from_crontab(scheduler_config.profile_job),timezone ='UTC')

我还检查了群集的资源,但是调度程序的cpu和内存甚至还没有达到极限。我们的平均值也很低。活动pod数量为25,即使这对我们的K8s集群来说也是一个问题,启用了自动缩放功能

这里的人有什么线索吗?

解决方法

请勿使用内存中的作业存储,而应使用Redis,mongo等持久性存储, 如果您需要作业在调度程序重新启动或应用程序崩溃后继续存在,则必须选择持久性作业存储。

APscheduler支持以下持久性作业存储。

  • SQLAlchemy
  • MongoDB
  • Redis
  • RethinkDB
  • ZooKeeper

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。