From 4eb5e05a327d720121d5302471dd32ed0da7a6f9 Mon Sep 17 00:00:00 2001 From: Ryan Williams Date: Sat, 3 Oct 2009 22:38:43 -0700 Subject: [PATCH] Added with-statement to pools.Pool objects for mad 2.5-ability. Should be 2.4-compatible though. --- eventlet/pools.py | 30 +++++++++++++++++++++++++----- 1 file changed, 25 insertions(+), 5 deletions(-) diff --git a/eventlet/pools.py b/eventlet/pools.py index b329956..afb6d82 100644 --- a/eventlet/pools.py +++ b/eventlet/pools.py @@ -90,7 +90,31 @@ class Pool(object): self.current_size += 1 return created return self.channel.wait() - + + try: + from contextlib import contextmanager + @contextmanager + def item(self): + """ Get an object out of the pool, for use with with statement. + + >>> from eventlet import pools + >>> pool = pools.TokenPool(max_size=4) + >>> with pool.item() as obj: + ... print "got token" + ... + got token + >>> pool.free() + 4 + """ + obj = self.get() + try: + yield obj + finally: + self.put(obj) + except ImportError: + pass + + def put(self, item): """Put an item back into the pool, when done """ @@ -140,7 +164,3 @@ class TokenPool(Pool): return Token() -class ExceptionWrapper(object): - def __init__(self, e): - self.e = e -