Kaynağa Gözat

Hitting Ctrl+C kills the pool! Pool workers needs to ignore SIGINT.

Ask Solem 15 yıl önce
ebeveyn
işleme
c3a3fcde7c
2 değiştirilmiş dosya ile 19 ekleme ve 3 silme
  1. 16 2
      celery/platform.py
  2. 3 1
      celery/worker/__init__.py

+ 16 - 2
celery/platform.py

@@ -15,7 +15,21 @@ def reset_signal(signal_name):
     try:
         signum = getattr(signal, signal_name)
         signal.signal(signum, signal.SIG_DFL)
-    except AttributeError:
+    except (AttributeError, ValueError):
+        pass
+
+
+def ignore_signal(signal_name):
+    """Ignore signal using :const:`SIG_IGN`.
+
+    Does nothing if the platform doesn't support signals,
+    or the specified signal in particular.
+
+    """
+    try:
+        signum = getattr(signal, signal_name)
+        signal.signal(signum, signal.SIG_IGN)
+    except (AttributeError, ValueError):
         pass
 
 
@@ -29,7 +43,7 @@ def install_signal_handler(signal_name, handler):
     try:
         signum = getattr(signal, signal_name)
         signal.signal(signum, handler)
-    except AttributeError:
+    except (AttributeError, ValueError):
         pass
 
 

+ 3 - 1
celery/worker/__init__.py

@@ -27,6 +27,7 @@ def process_initializer():
     _hijack_multiprocessing_logger()
 
     platform.reset_signal("SIGTERM")
+    platform.ignore_signal("SIGINT")
     platform.set_mp_process_title("celeryd")
 
     # This is for windows and other platforms not supporting
@@ -126,7 +127,7 @@ class WorkController(object):
         self.task_time_limit = task_time_limit
         self.task_soft_time_limit = task_soft_time_limit
         self.max_tasks_per_child = max_tasks_per_child
-        self._finalize = Finalize(self, self.stop, exitpriority=20)
+        self._finalize = Finalize(self, self.stop, exitpriority=1)
 
         # Queues
         if conf.DISABLE_RATE_LIMITS:
@@ -214,6 +215,7 @@ class WorkController(object):
 
     def terminate(self):
         """Not so gracefully shutdown the worker server."""
+        return self.stop()
         if self._state != "RUN":
             return