diff options
| author | Sergey Shepelev <temotor@gmail.com> | 2013-10-07 16:48:34 +0400 |
|---|---|---|
| committer | Sergey Shepelev <temotor@gmail.com> | 2013-12-03 22:36:29 +0400 |
| commit | d2bbbd79d3f903fbff59f09467af681d5b9282cf (patch) | |
| tree | 6a6da9b62894d62fdaa1050acbd39c46e710b9e8 /eventlet/pools.py | |
| parent | 35f600600c59c295fab0131c7bc0032e28b70045 (diff) | |
| download | eventlet-d2bbbd79d3f903fbff59f09467af681d5b9282cf.tar.gz | |
python3 compat: remove lots of Python 2.5 and earlier dependent code; use print() function syntax
Diffstat (limited to 'eventlet/pools.py')
| -rw-r--r-- | eventlet/pools.py | 60 |
1 files changed, 21 insertions, 39 deletions
diff --git a/eventlet/pools.py b/eventlet/pools.py index b1f8c63..1823f65 100644 --- a/eventlet/pools.py +++ b/eventlet/pools.py @@ -1,37 +1,12 @@ from __future__ import print_function import collections +from contextlib import contextmanager from eventlet import queue -__all__ = ['Pool', 'TokenPool'] - -# have to stick this in an exec so it works in 2.4 -try: - from contextlib import contextmanager - exec(''' -@contextmanager -def item_impl(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: - item_impl = None +__all__ = ['Pool', 'TokenPool'] class Pool(object): @@ -69,15 +44,6 @@ class Pool(object): with mypool.item() as thing: thing.dostuff() - If stuck on 2.4, the :meth:`get` and :meth:`put` methods are the preferred - nomenclature. Use a ``finally`` to ensure that nothing is leaked:: - - thing = self.pool.get() - try: - thing.dostuff() - finally: - self.pool.put(thing) - The maximum size of the pool can be modified at runtime via the :meth:`resize` method. @@ -121,13 +87,29 @@ class Pool(object): created = self.create() except: self.current_size -= 1 - raise + raise return created self.current_size -= 1 # did not create return self.channel.get() - if item_impl is not None: - item = item_impl + @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) def put(self, item): """Put an item back into the pool, when done. This may |
