我正在运行一个备份脚本,该脚本启动子进程以通过 rsync 执行备份。但是我无法限制它一次启动的 rsync 数量。
这是我目前正在处理的代码:
print "active_children: ", multiprocessing.active_children()
print "active_children len: ", len(multiprocessing.active_children())
while len(multiprocessing.active_children()) > 49:
sleep(2)
p = multiprocessing.Process(target=do_backup, args=(shash["NAME"],ip,shash["buTYPE"], ))
jobs.append(p)
p.start()
当我运行数百个 rsync 时,这最多显示一个孩子。这是实际启动 rsync 的代码(从 do_backup 函数内部),它command
是一个包含 rsync 行的变量:
print command
subprocess.Popen(command, stdout=subprocess.PIPE, shell=True)
return 1
如果我在 do_backup 函数中添加一个 sleep(x) ,它将在它睡觉时显示为一个活跃的孩子。此外,进程表显示 rsync 进程的 PPID 为 1。我由此假设 rsync 分裂并且不再是 python 的子进程,这允许我的子进程死亡,所以我不能再指望它了. 有谁知道如何让 python 孩子活着并被计数,直到 rsync 完成?