Created
August 9, 2014 10:20
-
-
Save SeavantUUz/963e0eefce1a96358128 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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