【发布时间】:2020-06-11 06:19:32
【问题描述】:
我正在尝试编写一个 python 守护进程 这将在某些条件下同时运行多个 shell 脚本 并在每项任务完成
时做点什么import time
import schedule
import subprocess
def spawn(name, count):
cmd = 'some long lived shell process'
proc = subprocess.Popen(cmd, shell=True, stdin=DEVNULL, stdout=DEVNULL, stderr=DEVNULL, close_fds=True)
consumers_dictionary[name] = proc
def thread_task():
if someconditions
spawn(name, count)
consumers_dictionary = {}
schedule.every(1).seconds.do(thread_task)
while 1:
schedule.run_pending()
time.sleep(1)
如何控制进程状态并在进程完成时执行某些操作? 认为我需要诸如 promises 之类的东西,或者检查我的每个字典 proc 对象的状态?
附:守护进程应该能够与多达 500 个进程一起工作(运行和跟踪状态)
【问题讨论】:
-
使用
Pool更容易。见docs.python.org/2/library/multiprocessing.html -
谢谢,但我的工作人员是用另一种语言编写的,看来我至少必须将它们作为 shell 命令运行。还是 Pool 提供这样的选择?
-
而且我还需要动态更改进程计数,对于一种类型的工人,最多 100 个。看起来像游泳池,我不能动态改变它的长度
-
“控制进程状态”是什么意思?你的意思是“检查进程是否还在运行”?
-
是的,检查进程是否仍在运行或完成。
标签: python python-3.x subprocess daemon