code looks like below:
class workers1(Thread): def __init__(self): Thread.__init__(self) def run(self): # ...do some stuff class workers2(Thread): def __init__(self): Thread.__init__(self) def run(self): # ...do some stuff if __name__ == "__main__": # start workers while True: print "Number of threads active", threading.activeCount() print "Number of worker1 threads", ?????, "Number of worker2 threads", ?????
Is there a way to get the number of threads being active by originating class ?
Advertisement
Answer
This is a minor modification of Doug Hellman’s multiprocessing ActivePool example code (to use threading). The idea is to have your workers register themselves in a pool, unregister themselves when they finish, using a threading.Lock to coordinate modification of the pool’s active list:
import threading import time import random class ActivePool(object): def __init__(self): super(ActivePool, self).__init__() self.active=[] self.lock=threading.Lock() def makeActive(self, name): with self.lock: self.active.append(name) def makeInactive(self, name): with self.lock: self.active.remove(name) def numActive(self): with self.lock: return len(self.active) def __str__(self): with self.lock: return str(self.active) def worker(pool): name=threading.current_thread().name pool.makeActive(name) print 'Now running: %s' % str(pool) time.sleep(random.randint(1,3)) pool.makeInactive(name) if __name__=='__main__': poolA=ActivePool() poolB=ActivePool() jobs=[] for i in range(5): jobs.append( threading.Thread(target=worker, name='A{0}'.format(i), args=(poolA,))) jobs.append( threading.Thread(target=worker, name='B{0}'.format(i), args=(poolB,))) for j in jobs: j.daemon=True j.start() while threading.activeCount()>1: for j in jobs: j.join(1) print 'A-threads active: {0}, B-threads active: {1}'.format( poolA.numActive(),poolB.numActive())
yields
Now running: ['A0'] Now running: ['B0'] Now running: ['A0', 'A1'] Now running: ['B0', 'B1'] Now running: ['A0', 'A1', 'A2'] Now running: ['B0', 'B1', 'B2'] Now running: ['A0', 'A1', 'A2', 'A3'] Now running: ['B0', 'B1', 'B2', 'B3'] Now running: ['A0', 'A1', 'A2', 'A3', 'A4'] Now running: ['B0', 'B1', 'B2', 'B3', 'B4'] A-threads active: 4, B-threads active: 5 A-threads active: 2, B-threads active: 5 A-threads active: 0, B-threads active: 3 A-threads active: 0, B-threads active: 3 A-threads active: 0, B-threads active: 3 A-threads active: 0, B-threads active: 3 A-threads active: 0, B-threads active: 3 A-threads active: 0, B-threads active: 0 A-threads active: 0, B-threads active: 0 A-threads active: 0, B-threads active: 0