Python:删除所有celery worker

Python: delete all celery workers

我想从 Python 脚本中启动和停止 celery 工作进程。我正在使用 Redis 作为代理和后端。

我发出一个 Popen 命令以从为工作人员安排任务的脚本内部启动工作人员:

  # start the celery deamon
  cmd = 'celery worker '
  cmd += '--app intertext.tasks '
  cmd += '--loglevel critical'
  subprocess.Popen(shlex.split(cmd))

所有步骤完成后,我想删除所有工作进程。我知道我可以做类似 ps -ef | grep celery | awk '{print }' | xargs kill -9 的事情,但那不会 运行 Windows。

终止使用 Popen 打开的进程的最佳方法是什么(或者从 Python 脚本中启动和停止 celery 守护进程的最佳方法)?

我最终使用了以下方法:

from psutil import Process
from subprocess import Popen
import shlex

def start_celery():
  '''
  Start the celery deamon.
  @returns:
    subprocess.Popen object that supports pid lookup via
    self.pid
  '''
  cmd = 'celery worker '
  cmd += '--app intertext.tasks '
  cmd += '--loglevel error'
  return subprocess.Popen(shlex.split(cmd))


def terminate_process(pid):
  '''
  Stop a process given its pid or stop all processes if pid
  is a list of identifiers.
  @args:
    int pid: the process identifier of the root process that
      spawned child celery processes
  '''
  process = Process(pid)
  for child in process.children(recursive=True):
    child.kill()
  process.kill()

# main
celery_process = start_celery()

# ...do work... then
terminate_process(celery_process.pid)

首先,输入这个脚本来显示所有的芹菜工人:

ps -aux | grep celery

然后杀掉所有的celery worker :

pkill -9 -f 'worker_name worker'

希望本文能帮助您解决问题。