2017-10-10 7 views
0

私は再実行されていない、失敗したタスク次の内容の簡単なtest_celery.pyファイルがあります:私は、タスクを実行するときにセロリタスクを再試行しませ

from celery import Celery 
import time 

app = Celery(
    'test_celery', 
    broker='amqp://', 
    backend='amqp' 
) 

@app.task(retries=4) 
def my_fail(): 
    try: 
     raise Exception() 
    except Exception as e: 
     print('Tring: {0}/{1}'.format(my_fail.request.retries, my_fail.max_retries)) 
     # Print log message with current retry 
     my_fail.retry(exc=e, max_retries=4, countdown=2) 

if __name__ == '__main__': 
    fail() 
    print('All done!') 

は残念ながら、それは一度だけ実行されます。

$ python test_celery.py 
Tring: 0/3 
Traceback (most recent call last): 
    File "test_celery.py", line 20, in <module> 
    my_fail() 
    File "/Users/alexgray/.virtualenvs/clearcare/lib/python3.4/site-packages/celery/local.py", line 191, in __call__ 
    return self._get_current_object()(*a, **kw) 
    File "/Users/alexgray/.virtualenvs/clearcare/lib/python3.4/site-packages/celery/app/task.py", line 380, in __call__ 
    return self.run(*args, **kwargs) 
    File "test_celery.py", line 17, in my_fail 
    my_fail.retry(exc=e, max_retries=4, countdown=2) 
    File "/Users/alexgray/.virtualenvs/clearcare/lib/python3.4/site-packages/celery/app/task.py", line 653, in retry 
    raise_with_context(exc or Retry('Task can be retried', None)) 
    File "test_celery.py", line 13, in my_fail 
    raise Exception() 
Exception 

明らかに何かが不足していると確信していますが、間違っていることはわかりません。

答えて

1

celery docsによると、実際には再試行を呼び出すことが望ましいと思います。

def my_fail(): 
    try: 
     raise Exception() 
    except Exception as e: 
     print('Tring: {0}/{1}'.format(my_fail.request.retries, my_fail.max_retries)) 
     # Print log message with current retry 
     raise my_fail.retry(exc=e, max_retries=4, countdown=2) 

タスクを呼び出すのではなく、エラーが発生していることに注意してください。

+0

あなたは正しいです。私はまた、my_fail()ではなくmainでmy_fail.delay()のように呼び出す必要がありました。 – grayaii

関連する問題