def __init__(self, **kw):
self._namedthreads = {}
for name, value in kw.items():
self.start(name, value)
def get(self, name=None):
if name is None:
l = []
for x in self._namedthreads.values():
l.extend(x)
return l
else:
return self._namedthreads.get(name, [])
def getstarted(self, name=None):
return [t for t in self.get(name) if t.isAlive()]
def names(self):
return self._namedthreads.keys()
def prunestopped(self, name=None):
for name in self.names():
self.prunestopped(name)
self._namedthreads[name] = self.getstarted(name)
def start(self, name, func):
l = self._namedthreads.setdefault(name, [])
thread = threading.Thread(name="%s%d" % (name, len(l)),
target=func)
thread.start()
l.append(thread)
def __repr__(self):
return "<NamedThreadPool %r>" %(self._namedthreads)