Browse Source

Fix for solo pool

Ask Solem 13 years ago
parent
commit
cc1598eaaa

+ 3 - 0
celery/concurrency/base.py

@@ -52,6 +52,9 @@ class BasePool(object):
     #: only used by multiprocessing pool
     on_process_down = None
 
+    #: only used by multiprocessing pool
+    uses_semaphore = False
+
     def __init__(self, limit=None, putlocks=True, **options):
         self.limit = limit
         self.putlocks = putlocks

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

@@ -56,6 +56,7 @@ class TaskPool(BasePool):
     Pool = Pool
 
     requires_mediator = True
+    uses_semaphore = True
 
     def on_start(self):
         """Run the task pool.

+ 2 - 2
celery/worker/__init__.py

@@ -91,7 +91,7 @@ class Pool(abstract.StartStopComponent):
         if w.autoscale:
             w.max_concurrency, w.min_concurrency = w.autoscale
 
-    def create(self, w):
+    def create(self, w, semaphore=None):
         threaded = not w.use_eventloop
         forking_enable(w.no_execv or not w.force_execv)
         procs = w.min_concurrency
@@ -143,7 +143,7 @@ class Queues(abstract.Component):
         if w.disable_rate_limits:
             w.ready_queue = FastQueue()
             if w.use_eventloop:
-                if w.pool_putlocks:
+                if w.pool_putlocks and w.pool_cls.uses_semaphore:
                     w.ready_queue.put = w.process_task_sem
                 else:
                     w.ready_queue.put = w.process_task