【问题标题】:Python: delete all celery workersPython:删除所有芹菜工人
【发布时间】:2018-05-12 11:13:15
【问题描述】:

我想从 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 $2}' | xargs kill -9 之类的操作,但这不会在 Windows 上运行。

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

【问题讨论】:

标签: python redis celery


【解决方案1】:

我最终使用了以下方法:

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)

【讨论】:

    【解决方案2】:

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

    ps -aux | grep celery
    

    然后按如下方式杀死所有芹菜工人:

    pkill -9 -f 'worker_name worker'
    

    我希望这可以帮助您解决问题。

    【讨论】:

    • 这里的目标是找到适用于 Windows 和 Unix 的解决方案
    猜你喜欢
    • 1970-01-01
    • 2017-04-23
    • 1970-01-01
    • 1970-01-01
    • 2014-08-17
    • 2022-01-08
    • 2014-06-09
    • 2019-03-13
    • 1970-01-01
    相关资源
    最近更新 更多