我正在使用Django,Celery和Jobtastic嘗試設置一些任務,我將在我的主webapp上進行輪詢。我正在使用RabbitMQ作爲我的經紀人。Jobtastic /芹菜/ RabbitMQ - AsyncResult總是等待
的問題是,當任務開始芹菜,試圖獲取狀態後顯示正常,如下圖所示:
def get_state(request, task_id):
if request.is_ajax():
task = AsyncResult(task_id)
data = task.result or task.state
print(data)
json_data = json.dumps(data)
return JsonResponse(json_data)
我無法得到任何其他狀態,但懸而未決。我的終端顯示該任務已完成,但我仍然處於PENDING狀態。我嘗試將CELERY_RESULT_BACKEND下的後端更改爲多個後端,包括DJCelery,AMQP和RPC。當啓動芹菜時,他們都顯示正確,所以我知道他們正在註冊。我也嘗試使用--pools = solo選項來啓動Celery,就像Windows平臺所建議的一樣,但也沒有任何運氣。下面是我的celery.py文件,我初始化芹菜應用程序。
from __future__ import absolute_import
import os
from celery import Celery
# set the default Django settings module for the 'celery' program.
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'arbitrage.settings')
from django.conf import settings # noqa
app = Celery('arbitrage')
# Using a string here means the worker will not have to
# pickle the object when using Windows.
app.config_from_object('django.conf:settings')
app.conf.update(
CELERY_RESULT_BACKEND='amqp',
BROKER_URL='amqp://'
)
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)
@app.task(bind=True)
def debug_task(self):
print('Request: {0!r}'.format(self.request))
我實例芹菜用下面的命令:
celery -A arbitrage worker -l info --pool=solo
任何幫助將不勝感激,我對芹菜3.1.5作爲Jobtastic不會芹菜版> 4.0的功能。