2015-08-26 5 views
5

मेरे पास कुछ अंतराल पर ईवेंट भेजने, एक फ्लास्क ऐप में एक एपीएसड्यूलर है।एपीएसड्यूलर अब नौकरी ट्रिगर कैसे करें

अब मैं सिर्फ उन्हें अब शुरू कर अगर वे परिभाषित अंतराल पर बिना छुए नहीं चलती, "ताज़ा" करने के लिए सभी नौकरियों की जरूरत है वास्तव में।

मैंने job.pause() तो job.resume() और कुछ भी नहीं, और नौकरी का उपयोग करने की कोशिश की है। reschedule_job (...) इसे ट्रिगर करेगा लेकिन अंतराल को भी बदल देगा ... जो मैं नहीं चाहता।

मेरे वास्तविक कोड bellow है:

cron = GeventScheduler(daemon=True) 
# Explicitly kick off the background thread 
cron.start() 

cron.add_job(_job_time, 'interval', seconds=5, id='_job_time') 
cron.add_job(_job_forecast, 'interval', hours=1, id='_job_forecast_01') 

@app.route("/refresh") 
def refresh(): 
    refreshed = [] 
    for job in cron.get_jobs(): 
     job.pause() 
     job.resume() 
     refreshed.append(job.id) 
    return json.dumps({'number': len(cron.get_jobs()), 'list': refreshed}) 

उत्तर

0

आप सीधे नौकरी समारोह भी चला सकते हैं।

for job in cron.get_jobs(): 
    job.func() 

आप आर्ग या kwargs समारोह में पारित किया जा रहा था, तो आप job.args और/या job.kwargs से बाहर उन खींचने के लिए होगा। apscheduler.job.Job

0

मैं निम्नलिखित का उपयोग किया गया है समाधान के लिए। संक्षेप में मैं सभी नौकरियों के माध्यम से चक्र cron.get_jobs() और जॉब ऑब्जेक्ट का उपयोग करके 'डेट' ट्रिगर पर एक बार का काम करता हूं, जो निर्दिष्ट नहीं होने के बाद केवल datetime.now पर ट्रिगर करता है।

def refresh(): 
    refreshed = [] 
    for job in cron.get_jobs(): 
     cron.add_job(job.func, 'date', id='{0}.uniq'.format(job.id), max_instances=1) 
     refreshed.append(job.id) 
    return json.dumps({'number': len(cron.get_jobs()), 'list': refreshed}) 
+0

पहले से ही 2 साल पहले, मैंने एक नया उत्तर पोस्ट किया है जो नौकरी शुरू करने के लिए उचित शेड्यूलिंग तंत्र का उपयोगकर्ता बना देगा _now_। –

4

मैं स्वीकार किए गए उत्तर में प्रस्तावित job.func() पर कॉल करने से हतोत्साहित हूं। शेड्यूलर इस तथ्य से अवगत नहीं होगा कि नौकरी चल रही है और नियमित शेड्यूलिंग तर्क के साथ गड़बड़ होगी।

इसके बजाय now() करने के लिए अपने next_run_time गुण सेट करने के लिए काम के modify() समारोह का उपयोग करें:

for job in cron.get_jobs(): 
    job.modify(next_run_time=datetime.now()) 

Also refer to the actual implementation of class Job

संबंधित मुद्दे