我正在尝试从Celery文档中运行示例。
我跑: celeryd --loglevel=INFO
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
task.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.registry.TaskRegistry
PYTHONPATH
celeryd --loglevel=INFO --settings=celeryconfig
您还可以设置,--loglevel=DEBUG并且您可能应该立即看到问题。
--loglevel=DEBUG