Skip to content

Instantly share code, notes, and snippets.

@SeavantUUz
Created August 9, 2014 10:20
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save SeavantUUz/963e0eefce1a96358128 to your computer and use it in GitHub Desktop.
Save SeavantUUz/963e0eefce1a96358128 to your computer and use it in GitHub Desktop.
from BasePool import BasePool
class TaskPool(BasePool):
def __init__(self, *args, **kwargs):
from gevent import spawn_raw
from gevent.pool import Pool
self.Pool = Pool
super(TaskPool, self).__init__(*args, **kwargs)
def on_start(self):
self._pool = self.Pool(self.limit)
self._quick_put = self._pool.spawn
def on_stop(self):
if self._pool is not None:
self._pool.join()
def on_apply(self, target, args=None):
return self._quick_put(target, args)
def resize(self, n=1):
delta = self._pool.size - n
if delta == 0:
pass
else:
try:
self._pool.join(timeout = 1)
except Exception:
pass
if delta > 0:
self.shrink(delta)
else:
self.grow(delta)
# self.grow(abs(delta))
# self.shrink(delta)
def grow(self, n=1):
self._pool._semaphore.counter += n
self._pool.size += n
def shrink(self, n=1):
self._pool._semaphore.counter -= n
self._pool.size -= n
@property
def num_processes(self):
return len(self._pool)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment