Django 芹菜发送任务但不执行任务

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():

我目前在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():
    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'