Celery任务的ETA关闭,使用RabbitMQ。

5

我已经成功地使用教程中的默认设置和在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)

第一个任务应该立即执行,然后每两秒执行一次。查看我的celery控制台,第一个任务会立即执行,然后其他任务会在两秒钟后按计划执行,但从明天开始:

[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]

我对Celery和RabbitMQ都是完全陌生的,所以任何关于如何解决这个问题或寻找原因的提示都将是非常有用的。这是在VMWare虚拟机上的Ubuntu系统中运行的,但是我已经正确设置了时钟。

1个回答

2

我认为它实际上是按照您的期望工作的。左侧的时间(在方括号和INFO / MainProcess之间)以本地时间呈现,而ETA时间以协调世界时(UTC)时间显示。例如:

以控制台输出的第二行中呈现的ETA时间为例:

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

减去8小时 (-08:00 是时区偏移量),你会得到:

2012-03-09 17:32:42.971072

这仅仅是在发送时间后的2秒钟:

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

我希望你能理解。处理时间问题经常让我头疼。

2
谢谢回复,但如果是这样的话,我认为任务应该正在执行。第一个任务(倒计时=0)执行了,但其他任务没有执行,在它们应该在彼此之后2秒执行的情况下。 - Iain Duncan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接