2017-07-08 19 views
0

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にしています。

答えて

0

完全に無関係なものになりました。 task_idはAsyncResultに渡すときに無効だったため、Pendingというステータスは偽のID値であっても知られていないため、常にPendingステータスを取得していました。

関連する問題