Skip to content

Instantly share code, notes, and snippets.

@ianschenck
Created April 11, 2015 18: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 ianschenck/3c3c02e8cdfd6379f9af to your computer and use it in GitHub Desktop.
Save ianschenck/3c3c02e8cdfd6379f9af to your computer and use it in GitHub Desktop.
class Pool(object):
def __init__(self, factory, size, finalizer=None):
self._factory = factory
self._finalizer = finalizer or lambda x: None
self._pool = list()
self._pool_sema = threading.Semaphore()
for _ in range(size):
self.put(self._factory())
def get(self):
self._pool_sema.acquire()
return self._pool.pop()
def put(self, obj):
self._pool.append(obj)
self._pool_sema.release()
def replace(self, obj):
self._finalizer(obj)
self.put(self._factory())
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment