a | b | |
---|
| 0 | + | diff --git a/socketpool/backend_eventlet.py b/socketpool/backend_eventlet.py |
---|
| 0 | + | index c86411e..9a93a57 100644 |
---|
| 0 | + | --- a/socketpool/backend_eventlet.py |
---|
| 0 | + | +++ b/socketpool/backend_eventlet.py |
---|
| 0 | + | @@ -4,6 +4,7 @@ |
---|
| 0 | + | # See the NOTICE for more information. |
---|
| 0 | + | |
---|
| 0 | + | import eventlet |
---|
| 0 | + | +from eventlet.green import select |
---|
| 0 | + | from eventlet.green import socket |
---|
| 0 | + | from eventlet import queue |
---|
| 0 | + | |
---|
| 0 | + | @@ -11,6 +12,7 @@ from socketpool.pool import ConnectionPool |
---|
| 0 | + | |
---|
| 0 | + | sleep = eventlet.sleep |
---|
| 0 | + | Socket = socket.socket |
---|
| 0 | + | +Select = select.select |
---|
| 0 | + | |
---|
| 0 | + | class PriorityQueue(queue.PriorityQueue): |
---|
| 0 | + | |
---|
| 0 | + | diff --git a/socketpool/backend_gevent.py b/socketpool/backend_gevent.py |
---|
| 0 | + | index ce5ba12..5d44536 100644 |
---|
| 0 | + | --- a/socketpool/backend_gevent.py |
---|
| 0 | + | +++ b/socketpool/backend_gevent.py |
---|
| 0 | + | @@ -4,6 +4,7 @@ |
---|
| 0 | + | # See the NOTICE for more information. |
---|
| 0 | + | |
---|
| 0 | + | import gevent |
---|
| 0 | + | +from gevent import select |
---|
| 0 | + | from gevent import socket |
---|
| 0 | + | from gevent import queue |
---|
| 0 | + | |
---|
| 0 | + | @@ -12,7 +13,7 @@ from socketpool.pool import ConnectionPool |
---|
| 0 | + | sleep = gevent.sleep |
---|
| 0 | + | PriorityQueue = queue.PriorityQueue |
---|
| 0 | + | Socket = socket.socket |
---|
| 0 | + | - |
---|
| 0 | + | +Select = select.select |
---|
| 0 | + | |
---|
| 0 | + | class ConnectionReaper(gevent.Greenlet): |
---|
| 0 | + | |
---|
| 0 | + | diff --git a/socketpool/backend_thread.py b/socketpool/backend_thread.py |
---|
| 0 | + | index 621edd4..ae8f751 100644 |
---|
| 0 | + | --- a/socketpool/backend_thread.py |
---|
| 0 | + | +++ b/socketpool/backend_thread.py |
---|
| 0 | + | @@ -12,9 +12,11 @@ try: |
---|
| 0 | + | except ImportError: # py3 |
---|
| 0 | + | import queue |
---|
| 0 | + | |
---|
| 0 | + | +Select = select.select |
---|
| 0 | + | Socket = socket.socket |
---|
| 0 | + | sleep = time.sleep |
---|
| 0 | + | |
---|
| 0 | + | + |
---|
| 0 | + | class PriorityQueue(queue.PriorityQueue): |
---|
| 0 | + | |
---|
| 0 | + | def __iter__(self): |
---|
| 0 | + | diff --git a/socketpool/conn.py b/socketpool/conn.py |
---|
| 0 | + | index 3d92618..f81ced2 100644 |
---|
| 0 | + | --- a/socketpool/conn.py |
---|
| 0 | + | +++ b/socketpool/conn.py |
---|
| 0 | + | @@ -3,6 +3,7 @@ |
---|
| 0 | + | # This file is part of socketpool. |
---|
| 0 | + | # See the NOTICE for more information. |
---|
| 0 | + | |
---|
| 0 | + | +import select |
---|
| 0 | + | import socket |
---|
| 0 | + | import time |
---|
| 0 | + | |
---|
| 0 | + | @@ -30,6 +31,7 @@ class TcpConnector(Connector): |
---|
| 0 | + | self._s.connect((host, port)) |
---|
| 0 | + | self.host = host |
---|
| 0 | + | self.port = port |
---|
| 0 | + | + self.backend_mod = backend_mod |
---|
| 0 | + | self._connected = True |
---|
| 0 | + | self._life = time.time() |
---|
| 0 | + | |
---|
| 0 | + | @@ -39,7 +41,15 @@ class TcpConnector(Connector): |
---|
| 0 | + | return target_host == self.host and target_port == self.port |
---|
| 0 | + | |
---|
| 0 | + | def is_connected(self): |
---|
| 0 | + | - return self._connected |
---|
| 0 | + | + if self._connected: |
---|
| 0 | + | + try: |
---|
| 0 | + | + r, _, _ = self.backend_mod.Select([self._s], [], [], 0) |
---|
| 0 | + | + if not r: |
---|
| 0 | + | + return True |
---|
| 0 | + | + except (ValueError, select.error,): |
---|
| 0 | + | + return False |
---|
| 0 | + | + self.close() |
---|
| 0 | + | + return False |
---|
| 0 | + | |
---|
| 0 | + | def handle_exception(self, exception): |
---|
| 0 | + | print 'got an exception' |
---|
| 0 | + | diff --git a/socketpool/pool.py b/socketpool/pool.py |
---|
| 0 | + | index 2d68d27..9048fca 100644 |
---|
| 0 | + | --- a/socketpool/pool.py |
---|
| 0 | + | +++ b/socketpool/pool.py |
---|
| 0 | + | @@ -89,8 +89,9 @@ class ConnectionPool(object): |
---|
| 0 | + | # let's put it back |
---|
| 0 | + | self.pool.put((priority, candidate)) |
---|
| 0 | + | else: |
---|
| 0 | + | - found = candidate |
---|
| 0 | + | - break |
---|
| 0 | + | + if candidate.is_connected(): |
---|
| 0 | + | + found = candidate |
---|
| 0 | + | + break |
---|
| 0 | + | |
---|
| 0 | + | if i <= 0: |
---|
| 0 | + | break |
---|
... | |
---|