Django、Celery、およびJobtasticを使用して、メインWebアプリケーションでポーリングするタスクを設定しようとしています。私はブローカーとしてRabbitMQを使用しています。Jobtastic/Celery/RabbitMQ - AsyncResultは常にPENDINGです
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などの複数のバックエンドに変更しようとしました。セロリーを立ち上げるときにそれらはすべて正しく表示され、登録されていることがわかります。私はまた、Windowsプラットフォームでは示唆されているように--pools = soloオプションを使ってCeleryを起動しようとしていますが、それには何の不運もありません。以下は、セロリのアプリケーションを初期化する私の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
Jobtasticはセロリのバージョン> 4.0で機能しませんように、私はセロリ3.1.5にしています。