diff --git a/django_q/cluster.py b/django_q/cluster.py index aa41397..ffae237 100644 --- a/django_q/cluster.py +++ b/django_q/cluster.py @@ -11,7 +11,6 @@ standard_library.install_aliases() # Standard import importlib -import os import signal import socket import sys @@ -31,7 +30,7 @@ from django import db import signing import tasks -from django_q.conf import Conf, redis_client, logger, psutil +from django_q.conf import Conf, redis_client, logger, psutil, get_ppid from django_q.models import Task, Success, Schedule from django_q.monitor import Status, Stat, ping_redis @@ -111,7 +110,7 @@ class Sentinel(object): signal.signal(signal.SIGINT, signal.SIG_IGN) signal.signal(signal.SIGTERM, signal.SIG_DFL) self.pid = current_process().pid - self.parent_pid = os.getppid() + self.parent_pid = get_ppid() self.name = current_process().name self.list_key = list_key self.r = redis_client diff --git a/django_q/conf.py b/django_q/conf.py index 9fb5f6d..16a00b1 100644 --- a/django_q/conf.py +++ b/django_q/conf.py @@ -7,6 +7,7 @@ from django.utils.translation import ugettext_lazy as _ from django.conf import settings # external +import os import redis # optional @@ -143,3 +144,13 @@ def get_redis_client(): # redis client redis_client = get_redis_client() + + +# get parent pid compatibility +def get_ppid(): + if hasattr(os, 'getppid'): + return os.getppid() + elif psutil: + return psutil.Process(os.getpid()).ppid() + else: + raise OSError('Your OS does not support `os.getppid`. Please install `psutil` as an alternative provider.')