如何解决芹菜打不执行任何事情
我有一个Celery任务,计划使用Celery beat每3小时运行一次。但是,什么也没有执行,并且我的celery beat容器中的日志为零...配置上有问题吗? 有什么建议吗?
我的堆栈:
python 3.7.0
celery==4.2.1
redis==3.4.1
redis-container: image "redis:5.0.9"
One celery worker container
One celery beat container
请注意,这三个容器位于docker群中,因此位于同一网络中。
我的python脚本:
初始化 .py
from celery import Celery,signals
CELERY = Celery(
my_project,backend="redis://redis:6379/1",broker="redis://redis:6379/1",include=["my_project.tasks","my_project.other_tasks"],)
CELERY.conf.update({"task_routes": {"my_project.tasks.*": {"queue": "my_queue"},"my_project.other_tasks.*": {"queue": "other_tasks"}},"worker_hijack_root_logger": False,"worker_log_format": "%(message)s","worker_redirect_stdouts": False
}
)
@signals.setup_logging.connect
def on_setup_logging(**kwargs):
pass
CELERY.log.setup()
tasks.py
from . import CELERY
@CELERY.on_after_finalize.connect
def setup_periodic_tasks(sender,**kwargs):
"""Setup the peridoci tasks
:param sender: sender
:param **kwargs:
"""
sender.add_periodic_task(10800,my_task.s())
@CELERY.task
def my_tasks(**kwargs):
print("Hello world")
芹菜工作者的进入点。请注意,当我使用task.apply_async()直接在容器中执行任务时,它正在工作。
celery --loglevel=INFO -A my_project.tasks worker -Q my_queue -c 3
芹菜节拍的进入点。 我相信问题出在这里:
celery -A my_project.tasks beat -b redis://redis:6379/1 -l debug
解决方法
问题是,您通过这些方式配置Celery创建定期任务,将指示其将指定任务发送到默认队列(通常命名为celery
)。由于您没有为该队列订阅工作程序(您的工作程序已订阅my_queue
),它将继续发送任务,但不会执行任务,因此{{ 1}}可能需要清除的队列。
解决此问题的一种方法是指示Celery调度程序将任务发送到celery
-为此,您需要更改task.py并拥有my_queue
我从不使用add_periodic_task(),而是建议您在配置Celery时使用beat_schedule。
此外,sender.add_periodic_task(10800,my_task.s(),options={'queue': 'my_queue'})
也将使其正常工作,但是您可能不希望该特定工作线程订阅celery --loglevel=INFO -A my_project.tasks worker -Q my_queue,celery -c 3
(默认)队列...
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。