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'
希望本文能帮助您解决问题。
我想从 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'
希望本文能帮助您解决问题。