【问题标题】:Understanding difference between celery and celery milti?了解 celery 和 celery milti 之间的区别?
【发布时间】:2014-05-12 05:31:59
【问题描述】:

当我和一位 celery worker -A myapp -l info 的工人一起运行 Celery 时,一切都很好,任务已执行。

但是当我在同一目录中运行 celery multi start 2 -Q:1 message_send -Q:2 message_manager 时,我收到了“Received unregistered task”错误。 当我运行两个 worker 时,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://*.com/a/23604197/1858864

【问题讨论】:

    标签: python django celery


    【解决方案1】:

    如果你在 django 中使用 celery,最好使用 manage.py 来启动 celery worker。 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 multi。

    celery multi start 1 2 -Q:1 message_send -Q:2 message_manager
    

    其中 1 和 2 是工人。

    更多信息用户celery multi --help

    【讨论】:

    • 谢谢!问题出在进口和芹菜运行字符串中。
    最近更新 更多