我创建了一个运行celery 的systemd进程。我已经将并发性设置为1,因为我需要在先进先出(fifo)队列上运行任务。
如果我需要停止celery 进行一些维护,如何让celery 在停止前等待当前正在运行的任务完成?我不希望它等待整个队列完成。我只需要celery 在celery 本身停止之前等待当前任务完成运行。
这是我的系统服务文件
[Unit]
Description=celery daemon
After=network.target
[Service]
User=<username>
Group=<group>
WorkingDirectory=/path_to_django_project/project_name
ExecStart=celery -A project_name worker --concurrency=1
[Install]
WantedBy=multi-user.target
1条答案
按热度按时间ql3eal8s1#
这正是正在发生的事情当您启动优雅关闭时,celery worker将从队列中取消订阅,等待其自己的工作进程执行的任务完成,然后它将关闭。
另外,您的起始行不正确。并发设置可以是
-c
或者--concurrency
. 以下是“工人帮助”中的引用:-c concurrency,--处理队列的子进程的并发数。默认值是系统上可用的CPU数。
并发性等于1似乎是错误的,除非运行celery worker的机器是单核的。
celery 文档的daemonization部分用一个例子解释了如何使用systemd。