代码如下所示:
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", ?????
有没有一种方法可以通过发起类来获取活动线程的数量?
这是对Doug Hellman的多处理ActivePool示例代码(使用线程)的较小修改。这个想法是让您的工作人员在一个池中注册自己,使用线程锁来协调他们对活动目录的修改:
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())
产量
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