diff --git a/beat/web/backend/schedule.py b/beat/web/backend/schedule.py index 10c8fbf9c74d2a39090214921be9617793d611e6..5d9f3cbe7be5ca582ef1a943ec743831c6c6795a 100644 --- a/beat/web/backend/schedule.py +++ b/beat/web/backend/schedule.py @@ -36,6 +36,7 @@ import subprocess import logging logger = logging.getLogger(__name__) +import psutil import simplejson from django.conf import settings @@ -475,6 +476,14 @@ def work(environments, cpulimit, process, django_settings): subprocess.Popen(cmdline + [execute, str(j.pk)]) +def cleanup_zombies(): + '''Cleans-up eventual zombie subprocesses launched by the call above''' + + for child in psutil.Process().children(): + if child.status == psutil.STATUS_ZOMBIE: + child.wait() + + def resolve_process_path(): '''Returns the path to cpulimit''' diff --git a/beat/web/backend/views.py b/beat/web/backend/views.py index 49054cd88bd1e192841b2bf9dad5785ba45be226..49192162125d7d624dbf775feb4d1b4dca2d6d45 100644 --- a/beat/web/backend/views.py +++ b/beat/web/backend/views.py @@ -46,7 +46,7 @@ from beat.core.async import resolve_cpulimit_path from .models import Environment, Worker, Queue from ..experiments.models import Experiment from . import state -from .schedule import schedule, work, worker_update +from .schedule import schedule, work, worker_update, cleanup_zombies from .schedule import find_environments, resolve_process_path @@ -59,13 +59,13 @@ class Work: cpulimit = resolve_cpulimit_path(None) process = resolve_process_path() environments = find_environments(None) - django_settings = os.environ.get('DJANGO_SETTINGS_MODULE', - 'beat.web.settings.zzz') + django_settings = os.environ.get('DJANGO_SETTINGS_MODULE') + def __call__(self): # update workers that require updates worker_update() - + cleanup_zombies() work( Work.environments, Work.cpulimit, @@ -102,7 +102,7 @@ def scheduler(request): cache_gb = int(cache['capacity-in-megabytes'] / 1024.0) # do scheduling and/or worker activity if required - if request.GET.has_key('activity'): + if settings.SCHEDULING_PANEL and request.GET.has_key('activity'): activity = request.GET['activity'] if activity in ('both', 'schedule'):