Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 芹菜不处理来自RabbitMQ的任务_Python_Django_Rabbitmq_Celery - Fatal编程技术网

Python 芹菜不处理来自RabbitMQ的任务

Python 芹菜不处理来自RabbitMQ的任务,python,django,rabbitmq,celery,Python,Django,Rabbitmq,Celery,我有一个Celery 4.1 worker,它被配置为使用RabbitMQ作为我的消息传递后端来处理名为“longjobs”的队列中的任务 我的芹菜配置和工作人员通过Django 1.11项目进行管理 没有任何东西会抛出任何错误,但从Django应用程序启动的任务从未被我的工作人员拾取 我的芹菜.py文件看起来像: from __future__ import absolute_import import os import sys from celery import Celery from

我有一个Celery 4.1 worker,它被配置为使用RabbitMQ作为我的消息传递后端来处理名为“longjobs”的队列中的任务

我的芹菜配置和工作人员通过Django 1.11项目进行管理

没有任何东西会抛出任何错误,但从Django应用程序启动的任务从未被我的工作人员拾取

我的
芹菜.py
文件看起来像:

from __future__ import absolute_import
import os
import sys

from celery import Celery
from celery._state import _set_current_app
import django

app = Celery('myproject')
app.config_from_object('django.conf:settings', namespace='CELERY')
_set_current_app(app)

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myproject.settings.settings')
sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '../myproject')))
django.setup()
from django.conf import settings
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)
我的Django芹菜设置为:

CELERY_IGNORE_RESULT = False
CELERY_TRACK_STARTED = True
CELERY_IMPORTS = (
    'myproject.myapp.tasks',
)
CELERY_RESULT_BACKEND = 'amqp'
CELERY_ACCEPT_CONTENT = ['pickle', 'json', 'msgpack', 'yaml']
CELERY_TASK_SERIALIZER = 'pickle'
CELERY_RESULT_SERIALIZER = 'pickle'
CELERY_RESULT_PERSISTENT = True
CELERY_ALWAYS_EAGER = False
CELERY_ROUTES = {
    'mytask': {'queue': 'longjobs'},
}
CELERY_WORKER_PREFETCH_MULTIPLIER = CELERYD_PREFETCH_MULTIPLIER = 1
CELERY_SEND_TASK_ERROR_EMAILS = True
CELERY_ACKS_LATE = True
CELERY_TASK_RESULT_EXPIRES = 360000
我通过以下方式启动我的员工:

celery worker -A myproject -l info -n longjobs@%h -Q longjobs
在它的日志文件中,我看到:

[2017-11-09 16:51:03,218: INFO/MainProcess] Connected to amqp://guest:**@127.0.0.1:5672/myproject
[2017-11-09 16:51:03,655: INFO/MainProcess] mingle: searching for neighbors
[2017-11-09 16:51:05,441: INFO/MainProcess] mingle: all alone
[2017-11-09 16:51:06,162: INFO/MainProcess] longjobs@localhost ready.
指示工作进程正在使用正确的虚拟主机和队列名称成功连接到RabbitMQ

我正在使用Flower和RabbitMQ管理接口进行调试。Flower确认我的员工正在运行,但表示从未收到任何任务

RabbitMQ管理员有点陌生。它表示“myproject”虚拟主机上存在“longjob”队列,并且它也没有收到任何任务,但是有大量的队列使用UUID作为名称,它们有不同数量的“就绪”任务等待处理。其中一个有200多个任务


为什么我的芹菜工人不能正确地从RabbitMQ中提取任务?我没有在任何日志文件中看到任何错误。我该如何诊断呢?

对不起,我还不能发表评论,但您的节拍流程在哪里?您可以使用
--beat
选项运行工人,不推荐用于生产,也可以单独运行beat流程

celery beat -A myproject -l info [--detach]

对不起,我还不能评论,但是你的节拍流程在哪里?您可以使用
--beat
选项运行工人,不推荐用于生产,也可以单独运行beat流程

celery beat -A myproject -l info [--detach]

尝试将
芹菜路径
更改为
芹菜任务路径
(在版本4.x中)

或者,我宁愿更换您的路由器:

CELERY_ROUTES = {
    'mytask': {'queue': 'longjobs'},
}
致:


尝试将
芹菜路径
更改为
芹菜任务路径
(在版本4.x中)

或者,我宁愿更换您的路由器:

CELERY_ROUTES = {
    'mytask': {'queue': 'longjobs'},
}
致:


你的任务在哪里?如何调用一个?os.environ.setdefault('DJANGO\u SETTINGS\u MODULE','myproject.SETTINGS')任务在哪里?如何调用一个?os.environ.setdefault('DJANGO\u SETTINGS\u MODULE','myproject.SETTINGS')