1. ホーム
  2. python

[解決済み] Celery 登録されていないタイプのタスクを受信した(実行例)

2022-02-16 22:45:37

質問

を実行しようとしています。 をCeleryのドキュメントから引用しています。

実行しています。 celeryd --loglevel=INFO

/usr/local/lib/python2.7/dist-packages/celery/loaders/default.py:64: NotConfigured: No 'celeryconfig' module found! Please make sure it exists and is available to Python.
  "is available to Python." % (configname, )))
[2012-03-19 04:26:34,899: WARNING/MainProcess]  

 -------------- celery@ubuntu v2.5.1
---- **** -----
--- * ***  * -- [Configuration]
-- * - **** ---   . broker:      amqp://guest@localhost:5672//
- ** ----------   . loader:      celery.loaders.default.Loader
- ** ----------   . logfile:     [stderr]@INFO
- ** ----------   . concurrency: 4
- ** ----------   . events:      OFF
- *** --- * ---   . beat:        OFF
-- ******* ----
--- ***** ----- [Queues]
 --------------   . celery:      exchange:celery (direct) binding:celery

tasks.py。

# -*- coding: utf-8 -*-
from celery.task import task

@task
def add(x, y):
    return x + y

run_task.py。

# -*- coding: utf-8 -*-
from tasks import add
result = add.delay(4, 4)
print (result)
print (result.ready())
print (result.get())

同じフォルダのceleryconfig.pyにあります。

CELERY_IMPORTS = ("tasks", )
CELERY_RESULT_BACKEND = "amqp"
BROKER_URL = "amqp://guest:guest@localhost:5672//"
CELERY_TASK_RESULT_EXPIRES = 300

"run_task.py"を実行すると。

pythonコンソール上

eb503f77-b5fc-44e2-ac0b-91ce6ddbf153
False

celeryd サーバーでのエラー

[2012-03-19 04:34:14,913: ERROR/MainProcess] Received unregistered task of type 'tasks.add'.
The message has been ignored and discarded.

Did you remember to import the module containing this task?
Or maybe you are using relative imports?
Please see http://bit.ly/gLye1c for more information.

The full contents of the message body was:
{'retries': 0, 'task': 'tasks.add', 'utc': False, 'args': (4, 4), 'expires': None, 'eta': None, 'kwargs': {}, 'id': '841bc21f-8124-436b-92f1-e3b62cafdfe7'}

Traceback (most recent call last):
  File "/usr/local/lib/python2.7/dist-packages/celery/worker/consumer.py", line 444, in receive_message
    self.strategies[name](message, body, message.ack_log_error)
KeyError: 'tasks.add'

何が問題なのか説明してください。

どのように解決するのですか?

現在登録されているタスクの一覧は celery.registry.TaskRegistry クラスがあります。もしかしたら、celeryconfig (カレントディレクトリ) が PYTHONPATH そのため、celery はそれを見つけることができず、デフォルトにフォールバックしてしまいます。celeryを起動するときに明示的に指定します。

celeryd --loglevel=INFO --settings=celeryconfig

を設定することもできます。 --loglevel=DEBUG で、おそらくすぐに問題が分かるはずです。