我正在使用python ap调度器在web.py框架内运行调度程序。函数runserver应该每天上午9点运行,但不一致。它大部分时间都在运行,但偶尔会跳过一天。
代码:
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时运行的正确方法是什么?
发布于 2016-02-01 19:21:54
APScheduler有一个宽限期,在此期间允许作业运行。如果由于某种原因,调度程序繁忙且/或主机负载过高,APScheduler可能无法及时启动作业。
在这种情况下,如果在宽限期内无法启动作业,它将被丢弃(如果初始化了Python日志,将记录一条解释性消息)。
根据实际的根本原因:
misfire_grace_time=None通知APScheduler尽快调度作业,而不是放弃作业。max_instances关键字参数来设置调度程序将允许并发运行的特定作业的最大实例数。在这种情况下,您可能还需要使用coalesce=False。只有在工作时间超过24小时(在您的情况下),并且您接受两个作业实例可能同时运行的情况下,才能这样做。总之,我首先尝试使用misfire_grace_period
@Nightlysched.scheduled_job('cron', hour=9, misfire_grace_time=None)但是请注意,正如@Alex所提到的,我不理解为什么您的代码工作,因为对Nightlysched.start()的调用应该阻止和阻止您的web应用程序的运行。我想这是粘贴代码,并不真正代表您正在运行的代码。在我看来,您应该使用像BackgroundScheduler这样的非阻塞调度程序。
https://stackoverflow.com/questions/34896705
复制相似问题