我创建了一个运行celery的systemd进程。我将并发性设置为1,因为我需要执行在先进先出(FIFO)队列中运行的任务。
如果我需要停止芹菜进行维护,如何使芹菜等待当前正在运行的任务完成后再停止?我不希望它等待整个队列完成。我只需要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
这就是正在发生的事情。 -当您启动正常关闭时,Celery worker将从队列中退订,等待其自己的worker进程执行的任务完成,然后将其关闭。
此外,您的ExecStart行不正确。并发设置可以通过-c
或--concurrency
进行设置。这是来自工人帮助的报价:
-c并发,--concurrency并发处理队列的子进程数。默认值为系统上可用的CPU数量。
并发性等于1似乎是错误的,除非运行Celery worker的计算机是单核。