【发布时间】:2019-12-29 22:37:44
【问题描述】:
我无法使用 Celery 中的 inspect() 函数来查看队列中的活动项和保留项。它不会返回{u'celery@mymachine': []} 之类的东西,而是总是返回None。
这是在我将 Docker 从使用 python:3.6-alpine 更改为 python:3.6 之后开始的,但现在,即使在我恢复到 alpine 之后,我仍然会收到这种行为。我已经尝试了这里建议的所有内容:Celery scheduled list returns None,但似乎也没有任何效果。
我在下面包含了一个显示我的问题的最小示例
如果有人对可能导致此问题的原因有任何想法,我将非常感激
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 撰写:
version: '3'
services:
redis:
image: redis
ports:
- 6379:6379
celery:
build:
context: .
dockerfile: Dockerfile.celery
depends_on:
- redis
volumes:
- .:/usr/src/app
requirements.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)
【问题讨论】:
标签: python redis docker-compose celery