2015-03-05 2 views
0

J'ajoute un travail à un planificateur en utilisant apscheduler en utilisant un script. Malheureusement, le travail n'est pas correctement planifié lors de l'utilisation d'un script car je n'ai pas démarré le planificateur.Comment forcer apscheduler à ajouter des tâches au magasin de travaux?

scheduler = self.getscheduler() # initializes and returns scheduler 
scheduler.add_job(trigger=trigger, func = function, jobstore = 'mongo') #sample code. Note that I did not call scheduler.start() 

Je vois un message: apscheduler.scheduler - INFO - Adding job tentatively -- it will be properly scheduled when the scheduler starts

Le script est censé créer des emplois au planificateur (pas exécuter le planificateur à ce cas particulier) et il y a d'autres informations qui doivent être ajouté sur l'événement d'un travail ajouté à la base de données. Est-il possible d'ajouter un travail et de forcer le planificateur à l'ajouter au jobstore sans réellement exécuter le planificateur?

Je sais, qu'il est possible de démarrer et d'arrêter le planificateur après l'ajout de chaque travail pour que le planificateur enregistre les informations de travail dans le jobstore. Est-ce vraiment une bonne approche? Edit: Mon intention originale était d'isoler le processus d'initialisation de mon logiciel. Je voulais juste ajouter des tâches à un planificateur, qui n'a pas encore démarré. Le vrai problème est que j'ai donné la permission à l'utilisateur de démarrer et d'arrêter le planificateur. Je ne peux pas garantir qu'il existe une instance en cours d'exécution du planificateur dans le système. J'ai corrigé temporairement le problème en démarrant le planificateur et en l'arrêtant après l'ajout de tâches. Ça marche.

Répondre

0

Vous devriez avoir un moyen d'avertir le planificateur qu'un travail a été ajouté, afin qu'il puisse se réveiller et ajuster le délai à son prochain réveil. Il est préférable de le faire via une sorte de mécanisme RPC. Quel type de mécanisme est approprié pour votre cas d'utilisation particulier, je ne sais pas. Mais RPyC et Execnet sont de bons candidats. Utilisez l'un d'entre eux ou quelque chose d'autre pour contrôler à distance le processus du planificateur pour ajouter ces tâches, et tout ira bien.

+0

Je ne sais pas comment utiliser RPC avec ça. Je vais essayer et informer plus tard. Mon souci est que le planificateur sait déjà que le travail est censé être ajouté. Il attend que l'ordonnanceur soit démarré, ce que je ne suis pas destiné à faire à ce moment précis. J'espère que nous sommes tous les deux dans la même page. J'utilise python et apscheduler. Merci quand même. –

+0

Ai-je mal compris vos exigences? N'ajoutez-vous pas les tâches dans un processus qui ne démarrera pas le planificateur? Je pensais que c'était ça. –

+0

Je n'ai pas utilisé RPC dans ma vie et je me suis trompé quand j'ai lu votre réponse. J'essayais de mettre en place une initialisation de mon logiciel. Je voulais juste ajouter des tâches au planificateur, sans démarrer le planificateur du tout. J'ai temporairement résolu le problème en démarrant le planificateur et en l'arrêtant par la suite. Est-ce vraiment une bonne approche? Le vrai problème est que j'ai donné le contrôle à l'utilisateur pour démarrer et arrêter le planificateur, par la conception actuelle, je ne serais peut-être pas en mesure de garantir qu'une instance de Scheduler est en cours d'exécution lorsque des tâches sont ajoutées. –