Python - how to get the number of active threads launched by a particular class?

The code is as follows:

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 make the number of threads be active based on the class?

+7
python multithreading count
source share
2 answers

This is a minor modification of the Doug Hellman multiprocessor code example ActivePool (for using threads). The idea is for your workers to register in the pool, unregister when they are finished using threading.Lock to coordinate the modification of the active pool 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()) 

gives

 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 
+11
source share

You can use a semaphore for each class and get their number: see link .

+3
source share

All Articles