2015-12-11 53 views
2

我们有要求在当前作业执行时动态调度多个作业。Python Apscheduler - 动态调度作业(嵌套)

大致情况是:

  • 应该有一个调度程序要经过的应用每天一个表(假设于06:00 UTC)。
  • 查找谁拥有今天的日期时间的用户作为resume_dttime
  • 动态调度该用户的工作,并在今天的resume_dttime

开始他的服务所以我的代码是:

from apscheduler.schedulers.blocking import BlockingScheduler 
sched = BlockingScheduler() 
@sched.scheduled_job('cron', day_of_week='mon-fri', hour=6) 
def scheduled_job(): 
    """ 
    """ 
    liveusers = todays_userslist() #Get users from table with todays resume_dttime 
    for u in liveusers: 
     user_job = get_userjob(u.id) 
     runtime = u.resume_dttime #eg u.resume_dttime is datetime(2015, 12, 13, 16, 30, 5) 
     sched.add_job(user_job, 'date', run_date=runtime, args=[u.name]) 


if __name__ == "__main__": 
    sched.start() 
    sched.shutdown(wait=True) 

的查询是:

  • 这是添加jo的好方法bs动态吗?
  • 问题是,可能有100个或更多的用户。那么,动态添加100个工作是一个好主意?
  • 有没有其他办法可以达到这个目的?
+0

@AlexGrönholm - 您将能够回答我的查询,它看起来像您是apscheduler的作者,您已经回答或评论了关于apscheduler的大部分查询。 https://apscheduler.readthedocs.org/zh/latest/userguide.html 在此先感谢! – Laxmikant

回答

2

APScheduler 3.0专门设计用于有效处理大量计划作业,因此我相信您使用它的预期方式是有效的。

+0

感谢您快速回复!我正在考虑再做一次更多的嵌套。我会在下周报告结果。再次感谢。 – Laxmikant

+0

即使完成了工作,我的调度程序也没有关闭。这是工作清单。 Pl帮助。 作业[<作业(id = 0479b0c6cc844879bcb555d262956890 name = APIManager.resume_user_serive)>] – Laxmikant

+0

您是否期望在sched.start()之后运行最后一行(sched.shutdown(wait = True))或您希望它运行的时间?您是否阅读过BlockingScheduler的文档? –