Browse Source

Greatly simplied the eventlet pool code, thanks to Ryan Williams

Ask Solem 14 years ago
parent
commit
ab6979deba
1 changed files with 4 additions and 22 deletions
  1. 4 22
      celery/concurrency/evlet.py

+ 4 - 22
celery/concurrency/evlet.py

@@ -1,31 +1,14 @@
-from eventlet import GreenPile, GreenPool
-from eventlet import hubs
+from eventlet import GreenPool
 from eventlet import spawn
-from eventlet.queue import LightQueue
 
 from celery.concurrency.base import apply_target, BasePool
 
 
 class TaskPool(BasePool):
-
-    def _forever_wait_for_pile(self):
-        avail = self._avail
-        pile = self._pile
-
-        while self.active:
-            try:
-                avail.queue.clear()
-                pile.next()
-            except StopIteration:
-                avail.get(block=True)  # wait for task
+    Pool = GreenPool
 
     def on_start(self):
-        hubs.use_hub()
-        self._avail = LightQueue()
-        self._pool = GreenPool(self.limit)
-        self._pile = GreenPile(self._pool)
-
-        spawn(self._forever_wait_for_pile)
+        self._pool = self.Pool(self.limit)
 
     def on_stop(self):
         if self._pool is not None:
@@ -33,9 +16,8 @@ class TaskPool(BasePool):
 
     def on_apply(self, target, args=None, kwargs=None, callback=None,
             accept_callback=None, **_):
-        self._pile.spawn(apply_target, target, args, kwargs,
+        self._pool.spawn(apply_target, target, args, kwargs,
                          callback, accept_callback)
-        self._avail.put(1)  # notify waiters of new tasks.
 
     @classmethod
     def on_import(cls):