diff --git a/django_q/cluster.py b/django_q/cluster.py index f2b4e62..a22b166 100644 --- a/django_q/cluster.py +++ b/django_q/cluster.py @@ -147,7 +147,7 @@ class Sentinel(object): p = Process(target=target, args=args) p.daemon = True if target == worker: - p.daemon = False + p.daemon = Conf.DAEMINIZE_WORKER p.timer = args[2] self.pool.append(p) p.start() diff --git a/django_q/conf.py b/django_q/conf.py index 9b7f83a..9bfbe71 100644 --- a/django_q/conf.py +++ b/django_q/conf.py @@ -91,6 +91,9 @@ class Conf(object): # sensible default WORKERS = 4 + # Option to undaemonize the workers and allow them to spawn child processes + DAEMONIZE_WORKERS = conf.get('daemonize_workers', True) + # Maximum number of tasks that each cluster can work on QUEUE_LIMIT = conf.get('queue_limit', int(WORKERS) ** 2) diff --git a/docs/configure.rst b/docs/configure.rst index 714881a..08e94ab 100644 --- a/docs/configure.rst +++ b/docs/configure.rst @@ -40,6 +40,12 @@ workers The number of workers to use in the cluster. Defaults to CPU count of the current host, but can be set to a custom number. [#f1]_ +daemonize_workers +~~~~~~~~~~~~~~~~~ + +Set the daemon flag when spawning workers. You may need to disable this flag if your worker needs to spawn child process but be carefull with orphaned child processes in case of sudden termination of the main process. +Defaults to ``True``. + recycle ~~~~~~~