如何解决Python中调度器的重试机制
我一直致力于在 python 中调度任务。有两种情况
- 调度程序需要每小时访问服务器以获取该小时的数据(200 ok)
- 重试机制:如果服务器端出现任何故障(即 response ),它必须每 30 秒命中一次,直到来自服务器的响应为 200 ok。 下面的代码已经试过了。
例如:成功---1hr---成功---1hr---失败---30sec---失败---30sec---成功---1hr---失败---30sec
class sched:
scheduler = BackgroundScheduler(timezone=utc)
startTime = datetime.Now
def __init__(self,tm:TM,scheduler):
self.tm = tm
self.code = tm.fun1()
self.job = scheduler.add_job(self.tm.fun1,trigger='interval',hour = '1',timezone='UTC')
def start_sched(self,scheduler):
if (scheduler.state != STATE_STOPPED) is False: #Scheduler is not running
scheduler.start()
def retry_sched(self,scheduler,code):
if (scheduler.state != STATE_STOPPED) is True: #Scheduler is running
if self.code is False: #But some failure happens
time.sleep(30) #For Every 30 secs it has to hit back
scheduler.start()
我能够运行调度程序并且它每小时都成功命中。但是当服务器的响应不成功时,即使如此也需要1小时才能再次命中。
如果失败,我是否需要创建新工作?不是双重工作吗? 有没有办法在成功和失败的情况下运行相同的工作。 请帮帮我,我真的很震惊。
解决方法
我可能会将重试循环保留在当前线程中,如下所示:
def retry_sched(self,scheduler,code):
if (scheduler.state != STATE_STOPPED): # Scheduler is running
while not self.code: # But some failure happens
time.sleep(30) # For Every 30 secs it has to hit back
您可能需要考虑一些重试次数,以便在失败次数过多后退出循环。
,不,您不需要单独的工作,simple-scheduler 只需一次调用即可完成所有工作。您需要做的就是在 status != 200 时引发异常,然后重试机制将自动启动。
from simple_scheduler.recurring import recurring_scheduler
def your_function():
status = ...
if status != 200:
raise Exception("Oh no!")
else:
// do your job
recurring_scheduler.add_job(target=your_function,period_in_seconds=60*60,job_name="your_function",number_of_reattempts=3,reattempt_duration_in_seconds=30)
recurring_scheduler.job_summary()
recurring_scheduler.run()
recurring_scheduler.job_summary()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。