0

我最近开始使用 django。我开始做一个小项目。我一直在使用 celery 和 redis worker。每次使用 celery 和 redis 我必须运行 celery 和 redis 服务器,然后运行 ​​django 服务器。这是一个有点漫长的过程。我有两个问题。1. 我是否通过每次运行服务器来做正确的事情,还是有任何其他正确的方法来处理这个过程?2.如果我的方向正确,有什么方法可以做到这一点吗?

我试过 circus.ini ,但没有用。

4

2 回答 2

1

如果您使用 UNIX 系统:

  1. 为此,您可以与bash相处。只需在后台运行celeryredis& - 使用命令。
redis-server & celery -A app_name worker -l info & python manage.py runserver

这种方法的缺点——rediscelery将在后台运行,即使在django 开发服务器关闭后也是如此。所以你需要终止这些进程。有关如何执行此操作的示例,请参阅此 unix se 答案。

因此,您可以创建 2 个 bash 脚本start.sh(包含带有 的命令&)和cleanup.sh(终止进程)并分别运行它们。

生产见目的#2

  1. 使用systemdsupervisor。您需要为您的守护进程创建 conf 文件,然后运行它们。
于 2019-12-19T23:45:00.853 回答
0

基于Yevhenii M.回答,您可以使用 a 启动子shell 命令,以在您点击+时终止该子shell 中的trap所有正在运行的进程:CtrlC

(trap "kill 0" SIGINT; redis-server & celery -A app_name worker -l info & python manage.py runserver)

或作为更易读的多行​​命令:

(
    trap "kill 0" SIGINT
    redis-server & 
    celery -A app_name worker -l info &
    python manage.py runserver
)

另一种选择是使用 Procfile 管理器,但这需要安装额外的依赖项/程序。像工头或其他语言的其中一个端口之类的东西:

(来源:工头的自述文件)

为此,您创建一个Procfile(项目根目录中的文件),在其中指定要运行的命令:

redis:  redis-server
worker: celery -A app_name worker
web:    python manage.py runserver

然后运行foreman start

于 2021-07-15T06:52:06.460 回答