我是 celery 和 redis 的新手,我试图理解为什么 celery 有时会陷入循环并不断为一项小工作创建任务。请查看日志。不知道这是否正常?
我正在使用:
__init__.py
#!venv/bin/python3
# -*- coding:utf-8 -*-
import os
import socket
import eventlet
from eventlet.green import ssl
def make_celery(app_name=__name__):
eventlet.monkey_patch(all=False, socket=True)
ssl.timeout_exc = socket.timeout
redis_url = os.environ.get(
'REDIS_URL', 'redis://localhost:6379/0')
celery_broker_url = redis_url
celery_result_backend = redis_url
celery = Celery(
app_name, backend=celery_result_backend, broker=celery_broker_url
)
return celery
try:
from celery import Celery
celery = make_celery()
except ImportError:
celery = None
celery workers
celery worker --app=mycompany.pptxcelery.celery_worker.celery --autoscale=5,1 --max-tasks-per-child=5 --time-limit=300
将我们的解决方案留在这里,以防将来对任何人有帮助。
我们问题的原因是我们使用的是 Redis=4.5.5,celery 明确表示不要使用它,因为它有问题。
升级到5.0.0解决了问题。