芹菜发送任务但不执行

时间:2018-08-10 19:31:29

标签: 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():
    print("HELLO!")
    logger.info("HELLO!")
    return "HELLO!"

我配置为每隔一分钟运行一次。任务已加载并每隔一分钟发送一次,但它从未运行(因为我在输出中看不到HELLO!字符串):

celeryworkerdev_1  | [2018-08-10 19:06:32,229: INFO/MainProcess] default@8516f3a70571 ready.
celerybeatdev_1    | [2018-08-10 19:08:30,044: DEBUG/MainProcess] beat: Waking up in 5.00 seconds.
celerybeatdev_1    | [2018-08-10 19:08:35,051: DEBUG/MainProcess] beat: Waking up in 5.00 seconds.
celerybeatdev_1    | [2018-08-10 19:08:40,060: DEBUG/MainProcess] beat: Waking up in 5.00 seconds.
celerybeatdev_1    | [2018-08-10 19:08:45,069: DEBUG/MainProcess] beat: Waking up in 5.00 seconds.
celerybeatdev_1    | [2018-08-10 19:08:50,077: DEBUG/MainProcess] beat: Waking up in 5.00 seconds.
celeryworkerdev_1  | [2018-08-10 19:06:32,230: DEBUG/MainProcess] basic.qos: prefetch_count->4
celerybeatdev_1    | [2018-08-10 19:08:55,084: DEBUG/MainProcess] beat: Waking up in 4.91 seconds.
celerybeatdev_1    | [2018-08-10 19:09:00,001: INFO/MainProcess] Scheduler: Sending due task gymnasium_say-hello (gymnasium.say_hello)
celerybeatdev_1    | [2018-08-10 19:09:00,002: DEBUG/MainProcess] gymnasium.say_hello sent. id->ef0a2715-185e-49da-89a0-a9f65b4ed05a
celerybeatdev_1    | [2018-08-10 19:09:00,003: DEBUG/MainProcess] beat: Waking up in 5.00 seconds.
celerybeatdev_1    | [2018-08-10 19:09:05,010: DEBUG/MainProcess] beat: Waking up in 5.00 seconds.
celerybeatdev_1    | [2018-08-10 19:09:10,019: DEBUG/MainProcess] beat: Waking up in 5.00 seconds.
celerybeatdev_1    | [2018-08-10 19:09:15,024: DEBUG/MainProcess] beat: Waking up in 5.00 seconds.
celerybeatdev_1    | [2018-08-10 19:09:20,032: DEBUG/MainProcess] beat: Waking up in 5.00 seconds.
celerybeatdev_1    | [2018-08-10 19:09:25,038: DEBUG/MainProcess] beat: Waking up in 5.00 seconds.
celerybeatdev_1    | [2018-08-10 19:09:30,045: DEBUG/MainProcess] beat: Waking up in 5.00 seconds.
celerybeatdev_1    | [2018-08-10 19:09:35,052: DEBUG/MainProcess] beat: Synchronizing schedule...
celerybeatdev_1    | [2018-08-10 19:09:35,053: INFO/MainProcess] Writing entries...
celerybeatdev_1    | [2018-08-10 19:09:35,071: DEBUG/MainProcess] beat: Waking up in 5.00 seconds.
celerybeatdev_1    | [2018-08-10 19:09:40,077: DEBUG/MainProcess] beat: Waking up in 5.00 seconds.
celerybeatdev_1    | [2018-08-10 19:09:45,083: DEBUG/MainProcess] beat: Waking up in 5.00 seconds.
celerybeatdev_1    | [2018-08-10 19:09:50,089: DEBUG/MainProcess] beat: Waking up in 5.00 seconds.
celerybeatdev_1    | [2018-08-10 19:09:55,097: DEBUG/MainProcess] beat: Waking up in 4.89 seconds.
celerybeatdev_1    | [2018-08-10 19:10:00,001: INFO/MainProcess] Scheduler: Sending due task gymnasium_say-hello (gymnasium.say_hello)
celerybeatdev_1    | [2018-08-10 19:10:00,006: DEBUG/MainProcess] gymnasium.say_hello sent. id->a3085879-4f27-415e-8683-aeea42fb15de
celerybeatdev_1    | [2018-08-10 19:10:00,007: DEBUG/MainProcess] beat: Waking up in 5.00 seconds.
celerybeatdev_1    | [2018-08-10 19:10:05,015: DEBUG/MainProcess] beat: Waking up in 5.00 seconds.

我在任何地方都没有错误。 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'

我想念什么吗?预先感谢。

编辑:

这是我开始做芹菜工人并殴打的方式:

celery worker -A turnapp -Q default -n default@%h -l DEBUG

celery beat -A turnapp -l INFO -S django --loglevel=debug

0 个答案:

没有答案