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 ?
Open Task Manager (press Ctrl+Shift+Esc) Select Performance tab. Look for Cores and Logical Processors (Threads)
We can discover the number of active threads in a Python process. This can be achieved via the threading. active_count() function that returns an integer that indicates the number threads that are “alive“.
enumerate() gathers all active threads including the calling thread (main_thread), the code calls join() methods of those threads except the main_thread.
The simplest way to see the number of threads in Java is to use a graphical tool like Java VisualVM. Apart from the application threads, Java VisualVM also lists the GC or any other threads used by the application like JMX threads. Monitoring the number of threads is the most basic feature in Java VisualVM.
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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With