2016-01-01 124 views
0

我們有要求在當前作業執行時動態安排多個作業。Python Apscheduler未關閉

大致情況是:

應該有一個調度程序要經過的應用每天一個表(假設於06:00 UTC)。 查找誰擁有今天的日期時間的用戶作爲resume_dttime 動態調度該用戶的工作,並在今天的resume_dttime 開始他的服務所以我的代碼是:

from apscheduler.schedulers.blocking import BlockingScheduler 
sched = BlockingScheduler() 

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__": 
    scheduled_job() 
    sched.start() 
    sched.shutdown(wait=True) 

代碼效果很好(一次作業)。沒有檢查多個工作,但它不會停下來。我試圖去除循環。另外,經歷了google的許多疑問。但沒有運氣:( 要退出,每一次,我需要通過CTrl+C退出

+0

其中代碼塊?在運行調度程序或之前?你可以發送你的CTRL-C回溯? –

+0

我不明白爲什麼阻塞wouldn不是預期的行爲,調度程序的作用是在後臺運行,偶爾會啓動一項工作,我是否缺少某些東西?cron是運行到我的背景的唯一替代方案。 –

回答

1

它會阻止在啓動()作爲documentation說,如果調度是從另一個線程關閉調用start()將只返回,你沒有做任何事情(從上面的片段判斷)

+0

好吧,謝謝,明白了!永遠不會來到'sched.sh utdown(等待=真)'。你能告訴我一個例子,通過另一個線程關閉它嗎? – Laxmikant

+0

關閉你的計劃任務之一吧?在那裏調用sched.shutdown()。 –