【问题标题】:APScheduler skips jobs and runs at other timesAPScheduler 跳过作业并在其他时间运行
【发布时间】:2020-12-07 13:18:33
【问题描述】:

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

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

  • 自 2020 年 3 月 27 日起,已在 21:30 至 00:00 之间停止运行的特定作业(设置为每小时第 0 分钟和第 30 分钟运行)。
  • 同样的作业在奇怪的时间运行,例如经常在 ~:15 和 :45。
  • 作业被跳过,而它们计划每 5 分钟运行一次。日志显示“启动作业”,但没有说明以下内容,它应该:Job "x_job (trigger: cron[month='', day='', day_of_week='', hour='', minute='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 集群的问题,也启用了自动缩放。

这里有人知道可能发生了什么吗?

【问题讨论】:

    标签: python azure docker kubernetes apscheduler


    【解决方案1】:

    不要使用内存中的作业存储,而是使用 Redis、mongo 等持久存储, 如果您需要作业在调度程序重新启动或应用程序崩溃时保持不变,则必须选择持久性作业存储。

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

    • SQLAlchemy
    • MongoDB
    • Redis
    • 重新思考数据库
    • 动物园管理员

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-10-04
      • 2017-08-15
      • 2018-09-28
      • 1970-01-01
      • 2019-08-01
      • 1970-01-01
      • 2018-07-13
      相关资源
      最近更新 更多