Django 芹菜发送任务但不执行任务
我目前在docker compose上运行Django 1.11.15、Celery 4.2和Redis 4.0.2的设置,我检测到celerybeat正确发送了我的定期任务,但工人似乎没有运行它们 一个简单的测试任务:Django 芹菜发送任务但不执行任务,django,docker,redis,celery,Django,Docker,Redis,Celery,我目前在docker compose上运行Django 1.11.15、Celery 4.2和Redis 4.0.2的设置,我检测到celerybeat正确发送了我的定期任务,但工人似乎没有运行它们 一个简单的测试任务: from celery.utils.log import get_task_logger from turnapp.celery import app logger = get_task_logger(__name__) @app.task def say_hello():
from celery.utils.log import get_task_logger
from turnapp.celery import app
logger = get_task_logger(__name__)
@app.task
def say_hello():
print("HELLO!")
logger.info("HELLO!")
return "HELLO!"
我将其配置为每分钟运行一次。任务每一分钟加载一次并发送一次,但它从未运行(因为我在输出中没有看到HELLO!
字符串):
我哪里都没有错误。Worker、Beat和Redis开始并显示加载的任务。以下是我的设置:
CELERY_REDIS_HOSTNAME = env.get(
'CELERY_REDIS_HOSTNAME',
default='broker-master'
)
CELERY_REDIS_PORT = env.get('CELERY_REDIS_PORT', default=6379)
CELERY_REDIS_DB = env.get('CELERY_REDIS_DB', default=0)
CELERY_BROKER_URL = env.get('CELERY_BROKER_URL', default='')
if not CELERY_BROKER_URL:
CELERY_BROKER_URL = 'redis://{hostname}:{port}/{db}'.format(
hostname=CELERY_REDIS_HOSTNAME,
port=CELERY_REDIS_PORT,
db=CELERY_REDIS_DB
)
CELERY_BROKER_POOL_LIMIT = 1
CELERY_BROKER_CONNECTION_TIMEOUT = 10
CELERY_ENABLE_UTC = True
CELERY_TIMEZONE = 'UTC'
CELERY_DEFAULT_QUEUE = 'default'
CELERY_QUEUES = (
Queue('default', Exchange('default'), routing_key='default')
)
CELERY_ALWAYS_EAGER = False
CELERY_ACKS_LATE = True
CELERY_TASK_PUBLISH_RETRY = True
CELERY_DISABLE_RATE_LIMITS = False
CELERY_RESULT_BACKEND = 'django-db'
我错过什么了吗?提前谢谢
编辑:
以下是我如何开始芹菜工人和击败:
芹菜工人-A turnapp-Q默认值-n默认值@%h-l调试
芹菜节拍-A turnapp-l INFO-S django--loglevel=debug
当您不使用docker时,它是否有效?@sP_u?在本地,我使用docker compose进行开发,在部署时使用Kubernetes。在这两种情况下,它都不起作用。我发现了这个错误,我认为它是相关的尝试删除所有不需要的设置,特别是一个路由键,芹菜使用默认值的工作,你不正确地覆盖它们可能是问题的原因。。。同时尝试用-B
启动芹菜工人,查看任务是否得到执行correctly@MazelTov谢谢我尝试禁用所有设置,并使用-B
而不是运行单独的芹菜节拍
实例。还是不走运!如何启动芹菜工人,如何启动beat,您是否可以探索在beat安排任务后,它确实存在的redis(先尝试不使用芹菜工人),例如
CELERY_REDIS_HOSTNAME = env.get(
'CELERY_REDIS_HOSTNAME',
default='broker-master'
)
CELERY_REDIS_PORT = env.get('CELERY_REDIS_PORT', default=6379)
CELERY_REDIS_DB = env.get('CELERY_REDIS_DB', default=0)
CELERY_BROKER_URL = env.get('CELERY_BROKER_URL', default='')
if not CELERY_BROKER_URL:
CELERY_BROKER_URL = 'redis://{hostname}:{port}/{db}'.format(
hostname=CELERY_REDIS_HOSTNAME,
port=CELERY_REDIS_PORT,
db=CELERY_REDIS_DB
)
CELERY_BROKER_POOL_LIMIT = 1
CELERY_BROKER_CONNECTION_TIMEOUT = 10
CELERY_ENABLE_UTC = True
CELERY_TIMEZONE = 'UTC'
CELERY_DEFAULT_QUEUE = 'default'
CELERY_QUEUES = (
Queue('default', Exchange('default'), routing_key='default')
)
CELERY_ALWAYS_EAGER = False
CELERY_ACKS_LATE = True
CELERY_TASK_PUBLISH_RETRY = True
CELERY_DISABLE_RATE_LIMITS = False
CELERY_RESULT_BACKEND = 'django-db'