From 2ce89ee4efb289ac7b14e1966b146b47cd3b60d6 Mon Sep 17 00:00:00 2001 From: Collin Fair Date: Thu, 27 Feb 2014 21:23:15 -0800 Subject: [PATCH] Added cpulimit daemon --- sync_cpulimit.py | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 sync_cpulimit.py diff --git a/sync_cpulimit.py b/sync_cpulimit.py new file mode 100644 index 000000000..1a7db90c8 --- /dev/null +++ b/sync_cpulimit.py @@ -0,0 +1,25 @@ +import os +import time +import subprocess + +cpulimit_procs = {} +worker_cpu_limit = int(os.environ.get("TAPIRIIK_WORKER_CPU_LIMIT", 4)) + +while True: + active_pids = [pid for pid in os.listdir('/proc') if pid.isdigit()] # Sorry, operating systems without procfs + for pid in active_pids: + try: + proc_cmd = open("/proc/%s/cmdline" % pid, "r").read() + except IOError: + continue + else: + if "sync_worker.py" in proc_cmd: + if pid not in cpulimit_procs or cpulimit_procs[pid].poll(): + cpulimit_procs[pid] = subprocess.Popen(["cpulimit", "-l", str(worker_cpu_limit), "-p", pid]) + + for k in list(cpulimit_procs.keys()): + if cpulimit_procs[k].poll(): + cpulimit_procs[k].wait() + del cpulimit_procs[k] + + time.sleep(1)