2011-12-08 57 views
11

我想使用Django的芹菜在我的項目Django的芹菜:沒有結果後端配置

在settings.py我

CELERY_RESULT_BACKEND = "amqp" 

服務器用

python manage.py celeryd --setting=settings 
開始罰款

但是,如果我想訪問延遲任務的結果,會出現以下錯誤:

Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "C:\Python27\lib\site-packages\celery\result.py", line 108, in ready 
    return self.status in self.backend.READY_STATES 
    File "C:\Python27\lib\site-packages\celery\result.py", line 196, in status 
    return self.state 
    File "C:\Python27\lib\site-packages\celery\result.py", line 191, in state 
    return self.backend.get_status(self.task_id) 
    File "C:\Python27\lib\site-packages\celery\backends\base.py", line 404, in _is 
_disabled 
    raise NotImplementedError("No result backend configured. " 
NotImplementedError: No result backend configured. Please see the documentation 
for more information. 

這很奇怪,因爲當我剛剛運行芹菜(具有相同的芹菜設置)時,它工作得很好。有沒有人遇到過這個問題?

在此先感謝!

回答

0

一些如何控制檯必須設置django環境才能獲取設置。例如,在PyCharm中,您可以運行django控制檯,其中一切都按預期工作。

4

我有同樣的問題,而得到的結果回從芹菜任務,儘管執行芹菜任務(控制檯日誌)。但是我發現了,我有同樣的設置在Django settings.py CELERY_RESULT_BACKEND = "redis",但我也中tasks.py

celery = Celery('tasks', broker='redis://localhost')實例芹菜 - 我想覆蓋的settings.py屬性,因此它並沒有配置後端服務器,用於存儲結果的芹菜實例。

我刪除了這個,讓django得到芹菜從settings.py中獲取屬性,示例代碼爲我工作。

1

對於那些正在拼命尋找像我這樣的解決方案的人。

把這一行在settings.py腳本的末尾:

djcelery.setup_loader() 

看起來Django的芹菜是不會考慮它本身的設置沒有嚴格的順序。

0

更好地瞭解見AMQP BACKEND SETTINGS

Note The AMQP backend requires RabbitMQ 1.1.0 or higher to automatically expire results. If you are running an older version of RabbitMQ you should disable result expiration like this: CELERY_TASK_RESULT_EXPIRES = None

嘗試添加下面一行到你的settings.py:

CELERY_TASK_RESULT_EXPIRES = 18000 # 5 hours

0

對我來說,問題是,我經過CELERY_RESULT_BACKEND參數到芹菜的構造函數:

Celery('proj', 
     broker = 'amqp://guest:[email protected]:5672//', 
     CELERY_RESULT_BACKEND='amqp://', 
     include=['proj.tasks']) 

解決方案是使用後端參數來代替:

Celery('proj', 
     broker = 'amqp://guest:[email protected]:5672//', 
     backend='amqp://', 
     include=['proj.tasks'])