2016-01-01 2 views
0

Nous avons besoin de planifier plusieurs tâches dynamiquement pendant l'exécution du travail en cours.Python Apscheduler ne s'arrête pas

Scénario approximatif est:

Il devrait y avoir un planificateur de passer par une table de base quotidienne de l'application (en supposant à 6 heures UTC). Trouver les utilisateurs qui a la datetime d'aujourd'hui comme resume_dttime de programmer les Dynamiquement un emploi pour l'utilisateur et le démarrage de son service à que le resume_dttime d'aujourd'hui Donc mon code est:

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) 

code fonctionne bien (pour un emploi). Non vérifié avec plusieurs travaux, mais il ne s'arrête pas du tout. J'ai essayé de retirer pour la boucle. En outre, ont traversé les nombreuses requêtes sur google. Mais pas de chance :( Pour quitter, à chaque fois, je dois sortir par CTrl+C

+0

où le bloc de code? pendant le planificateur en cours d'exécution ou avant? Pouvez-vous envoyer le retraçage de votre CTRL-C? –

+0

Je ne comprends pas pourquoi le blocage wouldn Le rôle d'un planificateur est de fonctionner en arrière-plan et de lancer occasionnellement un travail, est-ce que je manque quelque chose? cron est la seule alternative à l'arrière-plan courant pour moi –

Répondre

1

Il bloque au démarrage() comme documentation dit. L'appel start() ne retournera si le planificateur est arrêté d'un autre fil , que vous ne faites nulle part (à en juger par l'extrait ci-dessus)

+0

Okay, Merci, Got you! ne viendra jamais à 'sched.sh utdown (wait = True) '. Pouvez-vous s'il vous plaît me montrer un exemple pour le fermer à travers un autre fil? – Laxmikant

+0

Éteignez-le d'un de vos emplois réguliers peut-être? Appelez simplement sched.shutdown() ici. –