首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >python ap调度程序不一致

python ap调度程序不一致
EN

Stack Overflow用户
提问于 2016-01-20 09:52:12
回答 1查看 9K关注 0票数 3

我正在使用python ap调度器在web.py框架内运行调度程序。函数runserver应该每天上午9点运行,但不一致。它大部分时间都在运行,但偶尔会跳过一天。

代码:

代码语言:javascript
复制
import web
from apscheduler.schedulers.blocking import BlockingScheduler #Blocking Scheduler

#URLs
urls = (
    '/startscheduler/','index',
    )

Nightlysched = BlockingScheduler()

@Nightlysched.scheduled_job('cron', hour=9)
def runserver():
    print 2+2 #doing some calculations here

#Main function to run the cron JOB
if __name__ == "__main__":
    Nightlysched.start() #stating the job
    app = web.application(urls, globals())
    app.run() 

将调度程序配置为每天上午9时运行的正确方法是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-02-01 19:21:54

APScheduler有一个宽限期,在此期间允许作业运行。如果由于某种原因,调度程序繁忙且/或主机负载过高,APScheduler可能无法及时启动作业。

在这种情况下,如果在宽限期内无法启动作业,它将被丢弃(如果初始化了Python日志,将记录一条解释性消息)。

根据实际的根本原因:

  • 如果调度程序未能及时安排作业,则可以使用misfire_grace_time=None通知APScheduler尽快调度作业,而不是放弃作业。
  • 默认情况下,只允许同时运行每个作业的一个实例。确保上一次运行已经完成。在添加作业时,可以使用max_instances关键字参数来设置调度程序将允许并发运行的特定作业的最大实例数。在这种情况下,您可能还需要使用coalesce=False。只有在工作时间超过24小时(在您的情况下),并且您接受两个作业实例可能同时运行的情况下,才能这样做。
  • 如果有太多作业正在运行,但机器负载并不太高,这意味着您有更多的作业比您可以同时运行的作业多。您可以尝试增加APScheduler执行器用于运行作业的线程池的大小(这取决于您的设置,请选中:http://apscheduler.readthedocs.org/en/latest/userguide.html)。

总之,我首先尝试使用misfire_grace_period

代码语言:javascript
复制
@Nightlysched.scheduled_job('cron', hour=9, misfire_grace_time=None)

但是请注意,正如@Alex所提到的,我不理解为什么您的代码工作,因为对Nightlysched.start()的调用应该阻止和阻止您的web应用程序的运行。我想这是粘贴代码,并不真正代表您正在运行的代码。在我看来,您应该使用像BackgroundScheduler这样的非阻塞调度程序。

票数 15
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34896705

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档