فهرست منبع

Eventlet no longer crashes with Autoscale enabled

Ask Solem 13 سال پیش
والد
کامیت
06b2a9feeb
4فایلهای تغییر یافته به همراه14 افزوده شده و 2 حذف شده
  1. 4 0
      celery/concurrency/base.py
  2. 4 0
      celery/concurrency/processes/__init__.py
  3. 5 1
      celery/worker/__init__.py
  4. 1 1
      celery/worker/autoscale.py

+ 4 - 0
celery/concurrency/base.py

@@ -125,3 +125,7 @@ class BasePool(object):
     @property
     def active(self):
         return self._state == self.RUN
+
+    @property
+    def num_processes(self):
+        return self.limit

+ 4 - 0
celery/concurrency/processes/__init__.py

@@ -74,3 +74,7 @@ class TaskPool(BasePool):
                 "max-tasks-per-child": self._pool._maxtasksperchild,
                 "put-guarded-by-semaphore": self.putlocks,
                 "timeouts": (self._pool.soft_timeout, self._pool.timeout)}
+
+    @property
+    def num_processes(self):
+        return self._pool._processes

+ 5 - 1
celery/worker/__init__.py

@@ -255,7 +255,11 @@ class WorkController(object):
             raise
         except:
             self.stop()
-            raise
+            try:
+                raise
+            except TypeError:
+                # eventlet borks here saying that the exception is None(?)
+                pass
 
     def process_task(self, request):
         """Process task by sending it to the pool of workers."""

+ 1 - 1
celery/worker/autoscale.py

@@ -122,4 +122,4 @@ class Autoscaler(threading.Thread):
 
     @property
     def processes(self):
-        return self.pool._pool._processes
+        return self.pool.num_processes