芹菜任务eta关闭,使用rabbitmq

Iai*_*can 5 python rabbitmq celery django-celery

我使用教程中的默认设置和在ubuntu上运行的rabbitmq,让Celery任务正常运行.当我安排一个没有延迟的任务时,一切都很好,但是当我给他们一个eta时,他们将来安排好像我的时钟在某个地方.

这是一些要求任务的python代码:

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)
Run Code Online (Sandbox Code Playgroud)

所以第一个应该立即出去,然后每两秒钟出去一次.看着我的芹菜控制台,第一个立即发生,然后其他人安排两秒钟,但从明天开始:

[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]
Run Code Online (Sandbox Code Playgroud)

我对Celery和RabbitMQ都是全新的,所以任何有关如何解决这个问题或在哪里寻找原因的提示都会很棒.这是在Ubuntu的VMWare虚拟机上,但我已正确设置时钟.谢谢!

dap*_*wit 2

我认为它实际上正如你所期望的那样工作。左侧的时间(方括号之间且 INFO/MainProcess 之前)以本地时间显示,但 eta 时间显示为UTC时间。例如:

获取控制台输出第二行中显示的预计到达时间:

2012-03-10 01:32:42.971072-08:00
Run Code Online (Sandbox Code Playgroud)

减去 8 小时(-08:00时区偏移量),您将得到:

2012-03-09 17:32:42.971072
Run Code Online (Sandbox Code Playgroud)

发送时间后仅 2 秒:

2012-03-09 17:32:40,989
Run Code Online (Sandbox Code Playgroud)

我希望这是有道理的。处理时间常常让我头疼。

  • 感谢您的回复,但如果是这样的话,我认为任务将会执行。第一个任务(倒计时 = 0)执行,但其他任务均不执行,它们应该在彼此之后 2 秒执行。 (2认同)