了解芹菜和芹菜的差异?

时间:2014-05-12 05:32:00

标签: python django celery

当我与一名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

1 个答案:

答案 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