1

Celery と RabbitMQ サーバーを使用して非同期タスクを実行しようとしています。システムに をインストールCeleryRabbitMQました。を実行するcelery worker -l infoと、セロリは私の設定を無視してデフォルトの構成設定を使用して動作を開始し、登録されたタスクは表示されません。私のプロジェクト構造のために何か問題があると思います。しかし、それを変更することは今では不可能です。ここで何が問題なのかを理解するのを手伝ってくれる人はいますか?

タスクが見つからず、設定ファイルに記載されているユーザー名とパスワード、および仮想ホストを無視して、デフォルト設定で開始されます。 タスクが見つからず、設定ファイルに記載されているユーザー名とパスワード、および仮想ホストを無視して、デフォルト設定で開始されます。

プロジェクト ディレクトリ:

|--engine
|  |--app
|  |   |--user
|  |   |--program
|  |   |  |--__init__.py
|  |   |  |--admin.py
|  |   |  |--apps.py
|  |   |  |--models.py
|  |   |  |--tasks.py
|  |   |  |--urls.py
|  |   |  |--views.py
|  |   |--course
|  |--config
|  |   |--settings
|  |   |  |--__init.py
|  |   |  |--default.py
|  |   |  |--development.py
|  |   |  |--production.py
|  |   |--__init__.py
|  |   |--celery.py
|  |   |--middleware.py
|  |   |--urls.py
|  |   |--wsgi.py
|  |--.env
|  |--manage.py
|  |--requirements.txt

エンジン/設定/celery.py

from __future__ import absolute_import, unicode_literals
import os
from celery import Celery


os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'config.settings.default')

app = Celery('config')
app.config_from_object('django.conf:settings', namespace='CELERY')
app.autodiscover_tasks()


@app.task(bind=True)
def debug_task(self):
    print('Request: {0!r}'.format(self.request))

engine/config/__init__.py

from __future__ import absolute_import, unicode_literals
from .celery import app as celery_app

__all__ = ('celery_app',)

エンジン/アプリ/プログラム/タスク.py

from celery import shared_task


@shared_task()
def add(number1, number2):
    print(number1 + number2)

エンジン/構成/設定/default.py

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'rest_framework',
    'corsheaders',
    'django_filters',

    'app.program',
    'app.course',
    'app.user',
]

CELERY_BROKER_URL = 'amqp://uname:pass@localhost:5672/vhost/'

LANGUAGE_CODE = 'en-us'
TIME_ZONE = 'UTC'
USE_I18N = True
USE_L10N = True
USE_TZ = True
4

2 に答える 2

2

これまでのところ、構成に 3 つの問題があります。

  1. 設定ファイルでは、CELERY_BROKER_URL ではなく、BROKER_URL という名前でブローカー URL を指定する必要があります。
  2. tasks.py で指定するデコレーターは、@shared_task() ではなく @shared_task にする必要があります。
  3. セロリがタスクを探すパスを指定します。celery.py ファイルで、更新

    app.autodiscover_tasks() 
    

    app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)
    
于 2018-10-20T15:03:34.673 に答える