소스 검색

Added concurrency support for gevent (http://gevent.org)

Ask Solem 14 년 전
부모
커밋
bbd8127581
1개의 변경된 파일25개의 추가작업 그리고 0개의 파일을 삭제
  1. 25 0
      celery/concurrency/evg.py

+ 25 - 0
celery/concurrency/evg.py

@@ -0,0 +1,25 @@
+from gevent.greenlet import Greenlet
+from gevent.pool import Pool
+
+from celery.concurrency.base import apply_target, BasePool
+
+
+class TaskPool(BasePool):
+
+    def on_start(self):
+        self._pool = Pool(self.limit)
+
+    def on_stop(self):
+        if self._pool is not None:
+            self._pool.join()
+
+    def on_apply(self, target, args=None, kwargs=None, callback=None,
+            accept_callback=None, **_):
+        return self._pool.spawn(apply_target, target, args, kwargs,
+                                callback, accept_callback)
+
+    @classmethod
+    def on_import(cls):
+        from gevent import monkey
+        monkey.patch_all()
+TaskPool.on_import()