5 votes

celery task eta is off, using rabbitmq

J'ai obtenu que les tâches Celery se déroulent correctement, en utilisant les paramètres par défaut des tutoriels et en faisant tourner rabbitmq sur ubuntu. Tout va bien quand je planifie une tâche sans délai, mais quand je leur donne un délai, elles sont planifiées dans le futur comme si mon horloge était décalée quelque part.

Voici un code python qui demande des tâches :

for index, to_address in enumerate(email_addresses):
        # schedule one email every two seconds
        delay = index * 2
        log.info("MessageUsersFormView.process_action() scheduling task,"
            "email to %s, countdown = %i" % (to_address, delay) )
        tasks.send_email.apply_async(args=[to_address, subject, body],
            countdown = delay)

Le premier doit donc être émis immédiatement, puis toutes les deux secondes. En regardant ma console celery, le premier est émis immédiatement, puis les autres sont programmés à deux secondes d'intervalle, mais à partir de demain :

[2012-03-09 17:32:40,988: INFO/MainProcess] Got task from broker: stabil.tasks.send_email[24fafc0b-071b-490b-a808-29d47bbee435]
[2012-03-09 17:32:40,989: INFO/MainProcess] Got task from broker: stabil.tasks.send_email[3eb6c3ea-2c84-4368-babe-8a2ac0093836] eta:[2012-03-10 01:32:42.971072-08:00]
[2012-03-09 17:32:40,991: INFO/MainProcess] Got task from broker: stabil.tasks.send_email[a53110d6-b704-4d9c-904a-8d74b99a33af] eta:[2012-03-10 01:32:44.971779-08:00]
[2012-03-09 17:32:40,992: INFO/MainProcess] Got task from broker: stabil.tasks.send_email[2363329b-47e7-4edd-b38e-b09fed232003] eta:[2012-03-10 01:32:46.972422-08:00]

Je suis totalement novice en matière de Celery et de RabbitMQ, donc tout conseil sur la manière de résoudre ce problème ou sur la manière de rechercher la cause de ce problème serait le bienvenu. C'est sur une machine virtuelle VMWare d'Ubuntu, mais l'horloge est réglée correctement. Merci de votre compréhension.

2voto

dappawit Points 3782

Je pense qu'il fonctionne en fait comme prévu. Le temps à gauche (entre les crochets et avant INFO/MainProcess) est présenté en local mais le temps d'attente est indiqué comme suit UTC temps. Par exemple :

Prenez l'heure d'arrivée prévue (ETA) présentée dans la deuxième ligne de la sortie de votre console :

2012-03-10 01:32:42.971072-08:00

Soustraire 8 heures ( -08:00 est le décalage du fuseau horaire) et vous obtenez :

2012-03-09 17:32:42.971072

Ce qui est juste 2 secondes après l'heure d'envoi :

2012-03-09 17:32:40,989

J'espère que cela a du sens. La gestion des temps me donne souvent mal à la tête.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X