【问题标题】:Celery apply_async with eta executing faster than it should带有 eta 的 Celery apply_async 执行速度比它应该的要快
【发布时间】:2014-11-08 09:39:31
【问题描述】:
>>> def elp(min):
...     when = datetime.now() + timedelta(minutes=min)
...     print when
...     r = add.apply_async(args=[500,500],eta=when)
...     start = time.time()
...     r.get()
...     end = time.time()
...     elapsed = end-start
...     print elapsed
...
>>> elp(10)

2014-11-08 04:38:01.745000
1.00200009346

使用倒计时时的位置

>>> def elp_countdown(min):
...     r = add.apply_async(args=[500,500],countdown=(min*60))
...     start = time.time()
...     r.get()
...     end = time.time()
...     elapsed = end-start
...     print elapsed
...
>>> elp_countdown(0.5)
30.1380000114

为什么使用 eta 时任务的执行速度比预期的要快?

我的添加任务如下,

@task()
def add(x, y):
    return x + y

Celery 版本:3.1.16 (Cipter)

【问题讨论】:

  • 您需要在申请任务之前获得开始时间。

标签: celery django-celery


【解决方案1】:

所以经过一些研究和大量阅读后,事实证明我需要将 utc 日期时间传递给 celery,因为它的时区默认配置为 UTC。

如果有人想知道,请改为:

when = datetime.utcnow() + timedelta(minutes=min)

而不是

when = datetime.now() + timedelta(minutes=min)

将使其正常工作。

【讨论】:

  • 您发布了两次完全相同的行。那么你改变了什么?
  • 如果你使用 when = datetime.now() + timedelta(minutes=min) 那么 celery 会立即执行你的工作。始终使用 datetime.utcnow()
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-12-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多