evlet.py 881 B

123456789101112131415161718192021222324252627282930313233
  1. from eventlet import GreenPool
  2. from eventlet import spawn
  3. from celery.concurrency.base import apply_target, BasePool
  4. class TaskPool(BasePool):
  5. Pool = GreenPool
  6. signal_safe = False
  7. def on_start(self):
  8. self._pool = self.Pool(self.limit)
  9. def on_stop(self):
  10. if self._pool is not None:
  11. self._pool.waitall()
  12. def on_apply(self, target, args=None, kwargs=None, callback=None,
  13. accept_callback=None, **_):
  14. self._pool.spawn(apply_target, target, args, kwargs,
  15. callback, accept_callback)
  16. def blocking(self, fun, *args, **kwargs):
  17. return spawn(fun, *args, **kwargs).wait()
  18. @classmethod
  19. def on_import(cls):
  20. import eventlet
  21. import eventlet.debug
  22. eventlet.monkey_patch()
  23. eventlet.debug.hub_prevent_multiple_readers(False)
  24. TaskPool.on_import()