【问题标题】:Celery expires - Rise exception芹菜过期 - 引发异常
【发布时间】:2012-03-21 13:56:47
【问题描述】:

在文档中link 关于过期

# Task expires after one minute from now.
add.apply_async(args=[10, 10], expires=60) 

我用:

from tasks import add
result = add.apply_async(args=[10, 10], expires=6000)
printus(result)

def printus(result):
    print (result) #task id
    print (result.ready()) # returns True if the task has finished processing.
    print (result.result) # task is not ready, so no return value yet.
    print (result.get())  # Waits until the task is done and returns the retval.
    print (result.result) # direct access to result, doesn't re-raise errors.
    print (result.successful()) # returns True if the task didn't end in failure.)

tasks.py

from celery.task import task
@task
def add(x, y):
    return x + y

在芹菜中:

[2012-03-21 19:50:03,012: WARNING/MainProcess] Skipping revoked task: tasks.add[4ffcff91-b12b-4bce-8d47-159314759859]

在控制台中:

4ffcff91-b12b-4bce-8d47-159314759859
True

Traceback (most recent call last):
  File "/home/echeg/Dropbox/my_py/opoveshun/tests/celery/run_task.py", line 53, in <module>
    tr.countdown()
  File "/home/echeg/Dropbox/my_py/opoveshun/tests/celery/run_task.py", line 26, in countdown
    self.printus(result)
  File "/home/echeg/Dropbox/my_py/opoveshun/tests/celery/run_task.py", line 48, in printus
    print (result.get())  # Waits until the task is done and returns the retval.
  File "/usr/local/lib/python2.7/dist-packages/celery/result.py", line 95, in get
    interval=interval)
  File "/usr/local/lib/python2.7/dist-packages/celery/backends/amqp.py", line 144, in wait_for
    raise self.exception_to_python(meta["result"])
celery.exceptions.TaskRevokedError

为什么会出现异常?结果还没有过期

如果我使用:

result = add.apply_async(args=[10, 10])

一切正常

226107de-f739-4860-83bc-d843f17a257e
False
None
20
20
True

【问题讨论】:

    标签: python celery


    【解决方案1】:

    celeryd 认为你的任务已经过期:

    [2012-03-21 19:50:03,012: WARNING/MainProcess] Skipping revoked task: tasks.add[4ffcff91-b12b-4bce-8d47-159314759859]
    

    当一个过期任务被一个worker捡到,it revokes it不执行。检查您的时区设置?我遇到了相反的问题:任务在应该到期的时候没有到期。这为我解决了问题:

    CELERY_ENABLE_UTC = True
    CELERY_TIMEZONE = 'Etc/UTC'
    

    【讨论】:

      猜你喜欢
      • 2018-12-26
      • 1970-01-01
      • 2016-03-19
      • 2020-04-25
      • 2021-09-03
      • 2016-01-09
      • 1970-01-01
      • 1970-01-01
      • 2013-05-15
      相关资源
      最近更新 更多