我正在构建一个应用程序,其中涉及来自 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
命令,我希望这会自动启动任务队列,但这并没有产生任何结果。
问题(可能是): 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 生态系统:)
参考: