メッセージングバックエンドとしてRabbitMQを使用して、「longjobs」というキューからタスクを処理するようにCelery 4.1ワーカーを設定しました。RabbitMQからセロリを処理しない
My Celeryの設定と作業者は、Django 1.11プロジェクトによって管理されます。
何もエラーは発生しませんが、私のDjangoアプリケーションから起動されたタスクは私のワーカーによって決して拾われません。
マイcelery.py
ファイルは次のようになります。私のDjangoのセロリの設定がある
from __future__ import absolute_import
import os
import sys
from celery import Celery
from celery._state import _set_current_app
import django
app = Celery('myproject')
app.config_from_object('django.conf:settings', namespace='CELERY')
_set_current_app(app)
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myproject.settings.settings')
sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '../myproject')))
django.setup()
from django.conf import settings
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)
:
CELERY_IGNORE_RESULT = False
CELERY_TRACK_STARTED = True
CELERY_IMPORTS = (
'myproject.myapp.tasks',
)
CELERY_RESULT_BACKEND = 'amqp'
CELERY_ACCEPT_CONTENT = ['pickle', 'json', 'msgpack', 'yaml']
CELERY_TASK_SERIALIZER = 'pickle'
CELERY_RESULT_SERIALIZER = 'pickle'
CELERY_RESULT_PERSISTENT = True
CELERY_ALWAYS_EAGER = False
CELERY_ROUTES = {
'mytask': {'queue': 'longjobs'},
}
CELERY_WORKER_PREFETCH_MULTIPLIER = CELERYD_PREFETCH_MULTIPLIER = 1
CELERY_SEND_TASK_ERROR_EMAILS = True
CELERY_ACKS_LATE = True
CELERY_TASK_RESULT_EXPIRES = 360000
そして、私は私の労働者を起動します、
celery worker -A myproject -l info -n [email protected]%h -Q longjobs
とそのログファイルに私は参照してください:
[2017-11-09 16:51:03,218: INFO/MainProcess] Connected to amqp://guest:**@127.0.0.1:5672/myproject
[2017-11-09 16:51:03,655: INFO/MainProcess] mingle: searching for neighbors
[2017-11-09 16:51:05,441: INFO/MainProcess] mingle: all alone
[2017-11-09 16:51:06,162: INFO/MainProcess] [email protected] ready.
これは、ワーカーが正しい仮想ホストとキュー名でRabbitMQに正常に接続していることを示しています。
私はFlowerとRabbitMQ管理インターフェースを使ってデバッグしています。花は私の労働者が走っていることを確認しますが、決して何の仕事も受けていないと言います。
RabbitMQ管理者はちょっと見知らぬ人です。それは私の "myproject"仮想ホストのための "longjob"キューが存在し、それもタスクを受けていないが、名前のためのUUIDを持つキューがたくさんあり、保留中。これらのうちの1つに200以上のタスクがあります。
なぜ私のCeleryワーカーがRabbitMQからタスクを正しく引き出していないのですか?どのログファイルにもエラーは表示されません。これをどのように診断するのですか?
は?あなたはどのように電話しますか? –
os.environ.setdefault( 'DJANGO_SETTINGS_MODULE'、 'myproject.settings') – Ykh