Threads and snmp?

Cliff Daniel cdaniel at level3.net
Sun May 9 23:45:21 EDT 1999


I guess it would have been helpful if I would have included that it's an
UE-2 Dual
processor running solaris 2.5.1


Cliff Daniel wrote in message <3735bee9$0$26774 at news.denver1.Level3.net>...
>I'm trying to find out a few things about threaded python using the snmp
>module.  Bare with me here
>as this is my first python script.  Basically this scripts purpose it to
>pull an oid from about 300 hosts.
>Upon startup each thread is assigned multiple hosts in the MultipleDict
>hosts[] variable.  All that
>is working fine and starts all threads and they do their jobs without a
>problem.  The only thing is that
>running this with 1 thread is faster than , say, 15 threads.  Is this a
>design flaw or is there something
>with the snmp module that is limiting the number of concurrent polls going
>on ?  Most of the code
>is below, I've left out other stuff but here is the 'time' output of a few
>threads.  This is polling 300
>hosts.
>
>1 thread  = 14.13 secs
>3 threads = 15.4 secs
>5 threads = 14.17 secs
>20 threads = 14.97 secs
>
>I've also noticed that sometimes the snmp module reports 'invalid peer'
with
>no frequency.  Sometimes
>is does sometimes it doesn't.
>
>Any ideas?
>
>###########################################################################
#
>##
># WorkerThread()
>###########################################################################
#
>##
>def WorkerThread(tid):
>    global Active
>    global Sessions
>
>    Total = 0
>
>    print 'Thread %2d reporting for duty!' % tid
>
>    for targ in hosts[tid]:
>        s = snmp.open(targ, COMM, timeout=100000)
>
>        try:
>            res = s.get(SESSIONS)
>            result = res.value
>            Total = Total + string.atoi(result)
>
>        except snmp.SnmpTimeout:
>            result = "Timeout"
>
>        print '[tid:%02d] %-30s : %3s current sessions' % (tid, targ,
>result)
>
>    active_mutex.acquire()
>    Active = Active - 1
>
>    if (Active == 0):
>        wait.release()
>
>    active_mutex.release()
>
>    print "Finished thread", `tid`
>    session_mutex.acquire()
>    Sessions = Sessions + Total
>    session_mutex.release()
>    thread.exit_thread()
>
>###########################################################################
#
>##
># Main()
>###########################################################################
#
>##
>def Main():
>    global Active
>    global NumThreads
>
>    NumThreads = string.atoi(sys.argv[1])
>    Active = NumThreads
>    print 'Threads = ', NumThreads
>
>    ReadConf()
>
>    for n in range(NumThreads):
>        thread.start_new_thread(WorkerThread, (n,))
>
>    wait.acquire()
>    print "Total Sessions:", Sessions
>
>
>






More information about the Python-list mailing list