理解celery和celery milti之间的区别?
当我用一个工作进程运行Celery,命令是celery worker -A myapp -l info
时,一切都很好,任务都能正常执行。
但是当我在同一个目录下运行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
1 个回答
2
如果你在用Django搭配Celery,最好通过manage.py来启动Celery的工作进程。Celery(或者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工作进程。
celery multi start 1 2 -Q:1 message_send -Q:2 message_manager
这里的1和2就是工作进程的名字。
想了解更多信息,可以使用 celery multi --help
命令。