自动启动 django-background-tasks 的任务队列

问题描述 投票:0回答:1

我正在构建一个应用程序,其中涉及来自 django-background-tasks 的任务队列。我面临的问题是我似乎无法自动启动队列,必须在我的应用程序容器中手动运行

process_tasks

我已经尝试在我的 Dockerfile 中运行

process_tasks
命令,但这似乎没有执行任何操作,因为未解决打开的任务。

CMD ["bash", "-c", "python manage.py runserver 0.0.0.0:8000 && python manage.py process_tasks"]

有人遇到过这个问题吗?如果有的话你是怎么处理的?

我尝试在执行

process_tasks
后在 Dockerfile 中运行
runserver
命令,我希望这会自动启动任务队列,但这并没有产生任何结果。

django dockerfile background-task
1个回答
0
投票

问题(可能是): docker 文件中的

CMD
指令按顺序执行命令。由于
runserver
无限期地运行,并且命令
process_tasks
永远没有机会启动。

您现在面临的问题是,由于后台工作,

 django-background-tasks
无法在 docker 容器中自动启动。您当前使用
CMD
的方法可能不是最佳解决方案,您可以尝试一些替代方案,例如:

如果我遇到你的问题,那么我会选择

supervisor
celery
同时运行后台任务。

1。 Supervisor: 您必须在 docker 容器中安装类似 Supervisor 的进程管理器。

Supervisord
将确保
runserver
process_tasks
同时在后台运行。

RUN pip install supervisor
# Supervisor configuration
COPY supervisord.conf /etc/supervisor/conf.d/
CMD ["supervisord", "-n"]

注意: 您必须创建

supervisord.conf
文件,其中包含
runserver
process_tasks
的配置。你可以用谷歌搜索一下。

2。 Celery: Django后台任务可以与强大的分布式任务队列

Celery
集成。它提供了更多功能和对后台处理的控制,但需要额外的配置。

我希望你能得到一些解决这个问题的想法。我希望你会喜欢 Python/Django 生态系统:)

参考:

  1. https://imamhossainroni.me/supercharge-your-process-management-using-supervisor
  2. http://supervisord.org/configuration.html
  3. Python/django 应用程序未与supervisord 一起运行
© www.soinside.com 2019 - 2024. All rights reserved.