【问题标题】:Celery countdown sets eta in the past芹菜倒计时设定 eta 过去
【发布时间】:2013-11-13 22:29:30
【问题描述】:

我有一个芹菜任务,我使用倒计时关键字调用它。

def plan_my_task():
    countdown = some_computation_function()     #result is a positive integer
    res = my_task.apply_async(args=[some_arg], countdown=countdown)

@task
def my_task(some_arg):
    do_something()

在我的登录中看到类似

[2013-11-14 01:22:31,516: INFO/MainProcess] Received task: my_module.my_task[d5d36a59-b88a-43cb-b7ac-bf0737cdab2c] eta:[2013-11-14 01:16:17.513310+01:00]

如您所见,eta 设置在当前时间之前!

我使用 celery 3.1。

【问题讨论】:

  • 您说倒计时是正数,但可以肯定的是,如果您要将 countdown=countdown 替换为 countdown=abs(countdown),您还会在日志中看到这一点吗?
  • 另外,当你说倒计时是正数时,只是好奇......它通常有多大......在几十或几千?
  • 通常在十位。我尝试将其硬编码为 30,但没有结果

标签: celery django-celery


【解决方案1】:

我实际上并没有使用 celery,但从 API 看来,countdown 是 Task.apply_async 或 Task.retry 的关键字参数。它不是刚刚用@task 装饰的函数的关键字

编辑:根据this answer,可能是日志时间是本地时间,而ETA时间是UTC时间。如果倒计时是数千个,这可能是可能的(给我们几个小时的休息时间,而不是直接比较时间的几分钟)

【讨论】:

  • 你是绝对正确的。但是,apply_async 调用仅在我的问题中丢失,而不是在我的实际代码中 - 抱歉。修好了。