2015-10-19 2 views
4

Utilisation d'APScheduler version 3.0.3. Les services de mon application utilisent en interne APScheduler pour planifier des travaux d'exécution &. J'ai également créé une classe wrapper autour de l'APScheduler (juste une façade, aide dans les tests unitaires). Pour les tests unitaires de ces services, je peux simuler la classe wrapper. Mais j'ai une situation où j'aimerais vraiment que l'APScheduler exécute le travail (pendant le test). Y a-t-il un moyen par lequel on peut forcer le travail?Pouvons-nous forcer l'exécution des tâches dans le magasin de travaux APScheduler?

Répondre

4

Il n'y a pas de déclenchement par défaut pour lancer un travail immédiatement, pour atteindre cet objectif vous pouvez obtenir l'heure actuelle et définir un DateTrigger au travail comme celui-ci:

my_job.modify_job(trigger=DateTrigger(run_date=datetime.datetime.now())) 

cette façon, vous « forcer » la tâche à exécuter, mais vous devez vous assurer d'insérer à nouveau le travail dans le planificateur, une autre option est simplement de créer un nouvel emploi pour exécuter la même fonction avec la fonction add_job

sched.add_job(func=your_function(), 
       trigger=DateTrigger(run_date=datetime.datetime.now())) 

cette façon, vous n'avez pas faire une étape supplémentaire.

0

Une autre approche: vous pouvez écrire la logique de votre travail dans une fonction séparée. Ainsi, vous serez en mesure d'appeler cette fonction dans votre travail planifié ainsi que quelque part ailleurs. Je suppose que c'est une façon plus explicite de faire ce que vous voulez.