Collecting snmp data - threads, processes, twisted?

Mike C. Fletcher mcfletch at rogers.com
Tue Feb 7 10:47:46 EST 2006


Antal Rutz wrote:
...
> I'd like to collect snmp data from varoius network devices parallel.
>   
...
> Could you give me some advice how can I make my script really parallel?
>
> My options maybe:
> 1. pySNMP (as it's full in python)
> 2. subprocess (I'd like to make (find) a solution as threadpool.py)
>     (running yapsnmp, pySNMP or even net-snmp?...)
> 3. TwistedSNMP (seems too weird for me.. cannot imagine a simple 
> solution for my problem)
>   
This kind of parallel mass-query operation is TwistedSNMP's primary 
focus (it was created for a commercial product that scans thousands of 
agents).  If you really want all of the queries to run in parallel (i.e. 
send out all the queries within milliseconds of each other):

    agents = [ ... ]
    dl = []
    for agent in agents:
        dl.append( agent.get( (oid,oid,oid) ) )
    return defer.DeferredList( dl )

add a callback to the DeferredList which processes the 
(success,result_or_failure) list you get back.  If you want to process 
individual results/failures before the whole set returns, add the 
callback for that to the agent.get() result.

If you have thousands of devices you'll likely want to batch the queries 
into ~ 200 simultaneous queries and/or use multiple protocols (gives you 
more OS-level buffering).

Have fun,
Mike

________________________________________________
  Mike C. Fletcher
  Designer, VR Plumber, Coder
  http://www.vrplumber.com
  http://blog.vrplumber.com




More information about the Python-list mailing list