##// END OF EJS Templates
keepalive: use collections.defaultdict for host map...
Gregory Szorc -
r41453:a43acfa2 default
parent child Browse files
Show More
@@ -84,6 +84,7 b' EXTRA ATTRIBUTES AND METHODS'
84
84
85 from __future__ import absolute_import, print_function
85 from __future__ import absolute_import, print_function
86
86
87 import collections
87 import errno
88 import errno
88 import hashlib
89 import hashlib
89 import socket
90 import socket
@@ -114,15 +115,13 b' class ConnectionManager(object):'
114 """
115 """
115 def __init__(self):
116 def __init__(self):
116 self._lock = threading.Lock()
117 self._lock = threading.Lock()
117 self._hostmap = {} # map hosts to a list of connections
118 self._hostmap = collections.defaultdict(list) # host -> [connection]
118 self._connmap = {} # map connections to host
119 self._connmap = {} # map connections to host
119 self._readymap = {} # map connection to ready state
120 self._readymap = {} # map connection to ready state
120
121
121 def add(self, host, connection, ready):
122 def add(self, host, connection, ready):
122 self._lock.acquire()
123 self._lock.acquire()
123 try:
124 try:
124 if host not in self._hostmap:
125 self._hostmap[host] = []
126 self._hostmap[host].append(connection)
125 self._hostmap[host].append(connection)
127 self._connmap[connection] = host
126 self._connmap[connection] = host
128 self._readymap[connection] = ready
127 self._readymap[connection] = ready
@@ -155,19 +154,18 b' class ConnectionManager(object):'
155 conn = None
154 conn = None
156 self._lock.acquire()
155 self._lock.acquire()
157 try:
156 try:
158 if host in self._hostmap:
157 for c in self._hostmap[host]:
159 for c in self._hostmap[host]:
158 if self._readymap[c]:
160 if self._readymap[c]:
159 self._readymap[c] = 0
161 self._readymap[c] = 0
160 conn = c
162 conn = c
161 break
163 break
164 finally:
162 finally:
165 self._lock.release()
163 self._lock.release()
166 return conn
164 return conn
167
165
168 def get_all(self, host=None):
166 def get_all(self, host=None):
169 if host:
167 if host:
170 return list(self._hostmap.get(host, []))
168 return list(self._hostmap[host])
171 else:
169 else:
172 return dict(self._hostmap)
170 return dict(self._hostmap)
173
171
General Comments 0
You need to be logged in to leave comments. Login now