2012-03-21 52 views
4

在文档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 

在celeryd:

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

一切ok

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

回答

5

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

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

当一个过期的任务回升由工人,it revokes it未执行。检查你的时区设置?我有相反的问题:任务在他们应该有的时候没有过期。这固定它对我来说:

CELERY_ENABLE_UTC = True 
CELERY_TIMEZONE = 'Etc/UTC'