Browse Source

One fewer process when spawning commands

tags/nilmrun-0.3
Jim Paris 10 years ago
parent
commit
0338d40226
2 changed files with 16 additions and 7 deletions
  1. +14
    -5
      nilmrun/processmanager.py
  2. +2
    -2
      nilmrun/server.py

+ 14
- 5
nilmrun/processmanager.py View File

@@ -10,7 +10,6 @@ import os
import signal
import time
import uuid
import subprocess
import psutil

class LogReceiver(object):
@@ -163,16 +162,26 @@ class ProcessManager(object):
def __getitem__(self, key):
return self.processes[key]

def run_python(self, name, function, parameters):
def run_function(self, name, function, parameters):
"""Run a Python function that already exists"""
new = Process(name, function, parameters)
self.processes[new.pid] = new
return new.pid

def run_command(self, name, args):
"""Execute a command line program"""
def spwan_user_command(args): # pragma: no cover (runs in subprocess)
p = subprocess.Popen(args, close_fds = True, cwd = "/tmp")
sys.exit(p.wait())
return self.run_python(name, spwan_user_command, args)
try:
maxfd = os.sysconf("SC_OPEN_MAX")
except Exception:
maxfd = 256
os.closerange(3, maxfd)
try:
os.chdir("/tmp")
except OSError:
pass
os.execvp(args[0], args)
return self.run_function(name, spwan_user_command, args)

def terminate(self, pid):
return self.processes[pid].terminate()


+ 2
- 2
nilmrun/server.py View File

@@ -132,7 +132,7 @@ class AppFilter(object):
@exception_to_httperror(KeyError, ValueError)
@cherrypy.tools.CORS_allow(methods = ["POST"])
def trainola(self, data):
return self.manager.run_python(
return self.manager.run_function(
"trainola", nilmrun.filters.trainola.filterfunc, data)

# /filter/dummy
@@ -142,7 +142,7 @@ class AppFilter(object):
@exception_to_httperror(KeyError, ValueError)
@cherrypy.tools.CORS_allow(methods = ["POST"])
def dummy(self, data):
return self.manager.run_python(
return self.manager.run_function(
"dummy", nilmrun.filters.dummy.filterfunc, data)

class Server(object):


Loading…
Cancel
Save