2015-12-11 54 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的文檔? –