我已经无法使用 Celery 中的 inspect() 函数来查看队列中的活动和保留项目。它总是返回None
而不是返回类似{u'celery@mymachine': []}
的东西。
这始于我将Docker从使用python:3.6-alpine更改为python:3.6之后,但是现在,即使我恢复到alpine,我仍然会收到这种行为。我已经尝试了这里建议的所有内容:芹菜计划列表返回 没有,但似乎也不起作用。
我在下面包含一个最小的例子来显示我的问题
如果有人有任何想法可能导致这种情况,我将不胜感激
Docker文件:
FROM python:3.6-alpine
ENV CELERY_BROKER_URL redis://redis:6379/0
ENV CELERY_RESULT_BACKEND redis://redis:6379/0
ENV C_FORCE_ROOT true
WORKDIR /usr/src/app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
CMD celery -A celeryExample worker --concurrency=1 --loglevel=info
Docker-compose:
version: '3'
services:
redis:
image: redis
ports:
- 6379:6379
celery:
build:
context: .
dockerfile: Dockerfile.celery
depends_on:
- redis
volumes:
- .:/usr/src/app
要求.txt
celery
celeryExample.py
from celery import Celery
import celeryconfig
broker_url = os.environ.get('broker_url', 'redis://localhost:6379/0'),
result_backend = os.environ.get('result_backend', 'redis://localhost:6379/0')
app = Celery('server', broker = broker_url,
backend = result_backend)
app.config_from_object(celeryconfig)
@app.task
def add(x, y):
return x + y
芹菜配置:
worker_prefetch_multiplier = 1
worker_concurrency = 1
active.py:
from celery import Celery
import celeryconfig
from celery.task.control import inspect
import os
broker_url = os.environ.get('broker_url', 'redis://localhost:6379/0'),
result_backend = os.environ.get('result_backend', 'redis://localhost:6379/0')
app = Celery('server', broker = broker_url,
backend = result_backend)
app.config_from_object(celeryconfig)
i = inspect()
q = i.active()
print(q)
这发生在我今天身上,罪魁祸首是最近发布的 kombu==4.6.4 版本
https://github.com/celery/kombu/issues/1081
我将 kombu==4.6.3 添加到我的需求文件中,因此它覆盖了芹菜安装的那个,它又开始为我工作,希望对您有所帮助!