当我与一名celery worker -A myapp -l info
的工人一起经营Celery时,一切都很好,执行任务。
但是当我在同一目录中运行celery multi start 2 -Q:1 message_send -Q:2 message_manager
时,我会收到' 收到未注册的任务'错误。
当我跑两个工人时,Celery如何发现任务?
我的celery.py:
# coding: utf-8
from __future__ import absolute_import
import os
from celery import Celery
from django.conf import settings
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myapp.settings.local')
my_app = Myapp('Myapp', include=['myapp.messages.tasks'])
my_app.config_from_object('django.conf:settings')
my_app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)
@my_app.task(bind=True)
def debug_task(self):
print('Request: {0!r}'.format(self.request))
我的设置:
CELERY_ROUTES = {'messages.tasks.send_message': {'queue': 'message_send'},
'messages.tasks.control_message_send': {'queue': 'message_manager'}}
CELERY_IMPORTS = ('messages.tasks')
我的项目结构:
myapp
--settings
--messages
| --fixtures
| --migrations
| --tests
| -- __init__.py
| -- api.py
| -- tasks.py
| -- models.py
| -- views.py
-- __init__.py
-- celery.py
-- urls.py
-- utils.py
更新:问题在于导入。 https://stackoverflow.com/a/23604197/1858864
答案 0 :(得分:2)
如果您使用芹菜和django,最好使用manage.py来启动芹菜工人。有芹菜(或django-celery)预装的命令
# (just one worker)
python manage.py celeryd -Q myqueue -E -l info
# two workers
python manage.py celeryd_multi 1 2 -Q:1 message_send -Q:2 message_manager
但如果不想使用django命令,你应该像这样使用命名的工作人员启动celery multi。
celery multi start 1 2 -Q:1 message_send -Q:2 message_manager
其中1和2是工人。
了解更多信息用户celery multi --help