【问题标题】:python apscheduler not consistent when there are too many jobs running当运行的作业太多时,python apscheduler 不一致
【发布时间】:2017-10-23 07:22:17
【问题描述】:

我正在使用一个使用 python apscheduler.scheduler 的调度程序,并且在我的项目中,运行的作业太多,但机器负载并不太高,通过文档后,我得出了解决方案,我必须增加线程的大小,但我不知道,如何增加线程 我的语法:

scheduler.add_interval_job(triggerTask, interval_time, args=[], misfire_grace_time = None)

scheduler.add_cron_job(triggerTask, interval_time, args=[], misfire_grace_time = None)

【问题讨论】:

  • 请让您的问题更加明确。您要运行多少个任务?你用多少线程?一项任务需要多少时间?
  • @Sraw 任务数:90 线程数:默认一个任务时间:3-5秒

标签: python apscheduler


【解决方案1】:

由于您有 90 个任务要运行,您可能需要增加线程数,如果它们对计算敏感,您还应该使用ProcessPoolExecutor

from apscheduler.executors.pool import ThreadPoolExecutor, ProcessPoolExecutor
from apscheduler.schedulers.background import BackgroundScheduler

executors = {
    'default': ThreadPoolExecutor(90),   # max threads: 90
    'processpool': ProcessPoolExecutor(20)  # max processes 20
}
scheduler = BackgroundScheduler(executors=executors) 

scheduler 将使用default 默认执行器,您可以通过scheduler.add_interval_job(triggerTask, interval_time, executor="<executor's name>") 指定执行器。

【讨论】:

  • 谢谢@Sraw,因为我是python新手,你能告诉我一件事吗。现在我的 Syntex 就像 from apscheduler.scheduler import Scheduler scheduler = Scheduler() scheduler.start() scheduler.add_interval_job() 一样。是否需要将“from apscheduler.scheduler import Scheduler”替换为“from apscheduler.scheduler.background import BackgroundScheduler”?
  • 我不确定,因为我的包裹里没有apscheduler.scheduler.Scheduler。也许您使用的是旧版本,请尝试升级您的软件包并遵循最新文档:apscheduler.readthedocs.io/en/latest/userguide.html
  • 谢谢@Sraw,我已经添加了 job_default ={ 'coalesce': False,'max_instances': 3} scheduler = BackgroundScheduler(executors=executors, job_defaults=job_defaults) 我会在我的生产中检查它服务器,让您知道,如果我需要任何进一步的帮助。再次感谢您。
  • 感谢@Sraw 分享这个。
猜你喜欢
  • 2018-09-28
  • 1970-01-01
  • 2013-10-03
  • 2016-04-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-28
相关资源
最近更新 更多