1
2
3
4
5
6 import time
7
8 from restkit.conn.base import Pool, ConnectionManager
9 from restkit.conn import http_connection
10
11 from eventlet.green import socket
12 from eventlet.green import ssl
13 from eventlet import queue
14 from eventlet import semaphore
15
17
19 self.filters.apply("on_connect", self)
20
21 self.sock = socket.create_connection(self.addr,
22 timeout=self.timeout)
23 if self.is_ssl:
24 self.sock = ssl.GreenSSLSocket(self.sock, **self.kwargs)
25
26
27
28
30
31 - def __init__(self, conn_manager, route, timeout=300,
32 nb_connections=10):
33 self.conn_manager = conn_manager
34 self.route = route
35 self.nb_connections = nb_connections
36 self.timeout = timeout
37 self.connections = queue.PriorityQueue()
38 self.iddle_connections = {}
39 self.active_connections = {}
40
54
55 - def release(self, conn, duration=300):
56 if self.connections.qsize() >= self.nb_connecions:
57 conn.close()
58 return
59 expires = time.time() + duration
60 self.connections.put_nowait((expires, conn))
61
63 while True:
64 try:
65 expires, conn = self.connections.get_nowait()
66 except queue.Empty:
67 break
68 if time.time() > expires:
69 conn.close()
70 else:
71 self.connections.put((expires, conn))
72 break
73
75 while True:
76 try:
77 expires, conn = self.connections.get_nowait()
78 conn.close()
79 except queue.Empty:
80 break
81
82
89