summaryrefslogtreecommitdiff
path: root/examples/hlapi/asyncore/sync/manager/cmdgen/query-agents-from-multuple-threads.py
diff options
context:
space:
mode:
Diffstat (limited to 'examples/hlapi/asyncore/sync/manager/cmdgen/query-agents-from-multuple-threads.py')
-rw-r--r--examples/hlapi/asyncore/sync/manager/cmdgen/query-agents-from-multuple-threads.py77
1 files changed, 37 insertions, 40 deletions
diff --git a/examples/hlapi/asyncore/sync/manager/cmdgen/query-agents-from-multuple-threads.py b/examples/hlapi/asyncore/sync/manager/cmdgen/query-agents-from-multuple-threads.py
index 34ead8b5..d289982e 100644
--- a/examples/hlapi/asyncore/sync/manager/cmdgen/query-agents-from-multuple-threads.py
+++ b/examples/hlapi/asyncore/sync/manager/cmdgen/query-agents-from-multuple-threads.py
@@ -17,46 +17,48 @@ Send a bunch of SNMP GET requests simultaneously using the following options:
"""#
from sys import version_info
+from threading import Thread
+from pysnmp.hlapi import *
+
if version_info[0] == 2:
from Queue import Queue
else:
from queue import Queue
-from threading import Thread
-from pysnmp.hlapi import *
# List of targets in the followin format:
# ( ( authData, transportTarget, varNames ), ... )
targets = (
# 1-st target (SNMPv1 over IPv4/UDP)
- ( CommunityData('public', mpModel=0),
- UdpTransportTarget(('demo.snmplabs.com', 161)),
- ( ObjectType(ObjectIdentity('SNMPv2-MIB', 'sysDescr', 0)),
- ObjectType(ObjectIdentity('SNMPv2-MIB', 'sysLocation', 0)))),
+ (CommunityData('public', mpModel=0),
+ UdpTransportTarget(('demo.snmplabs.com', 161)),
+ (ObjectType(ObjectIdentity('SNMPv2-MIB', 'sysDescr', 0)),
+ ObjectType(ObjectIdentity('SNMPv2-MIB', 'sysLocation', 0)))),
# 2-nd target (SNMPv2c over IPv4/UDP)
- ( CommunityData('public'),
- UdpTransportTarget(('demo.snmplabs.com', 161)),
- ( ObjectType(ObjectIdentity('SNMPv2-MIB', 'sysDescr', 0)),
- ObjectType(ObjectIdentity('SNMPv2-MIB', 'sysLocation', 0)))),
+ (CommunityData('public'),
+ UdpTransportTarget(('demo.snmplabs.com', 161)),
+ (ObjectType(ObjectIdentity('SNMPv2-MIB', 'sysDescr', 0)),
+ ObjectType(ObjectIdentity('SNMPv2-MIB', 'sysLocation', 0)))),
# 3-nd target (SNMPv2c over IPv4/UDP) - same community and
# different transport address.
- ( CommunityData('public'),
- UdpTransportTarget(('localhost', 161)),
- ( ObjectType(ObjectIdentity('SNMPv2-MIB', 'sysContact', 0)),
- ObjectType(ObjectIdentity('SNMPv2-MIB', 'sysName', 0)))),
+ (CommunityData('public'),
+ UdpTransportTarget(('localhost', 161)),
+ (ObjectType(ObjectIdentity('SNMPv2-MIB', 'sysContact', 0)),
+ ObjectType(ObjectIdentity('SNMPv2-MIB', 'sysName', 0)))),
# 4-nd target (SNMPv3 over IPv4/UDP)
- ( UsmUserData('usr-md5-des', 'authkey1', 'privkey1'),
- UdpTransportTarget(('demo.snmplabs.com', 161)),
- ( ObjectType(ObjectIdentity('SNMPv2-MIB', 'sysDescr', 0)),
- ObjectType(ObjectIdentity('SNMPv2-MIB', 'sysLocation', 0) ))),
+ (UsmUserData('usr-md5-des', 'authkey1', 'privkey1'),
+ UdpTransportTarget(('demo.snmplabs.com', 161)),
+ (ObjectType(ObjectIdentity('SNMPv2-MIB', 'sysDescr', 0)),
+ ObjectType(ObjectIdentity('SNMPv2-MIB', 'sysLocation', 0)))),
# 5-th target (SNMPv3 over IPv6/UDP)
- ( UsmUserData('usr-md5-none', 'authkey1'),
- Udp6TransportTarget(('::1', 161)),
- ( ObjectType(ObjectIdentity('SNMPv2-MIB', 'sysDescr', 0)),
- ObjectType(ObjectIdentity('SNMPv2-MIB', 'sysLocation', 0)))),
+ (UsmUserData('usr-md5-none', 'authkey1'),
+ Udp6TransportTarget(('::1', 161)),
+ (ObjectType(ObjectIdentity('SNMPv2-MIB', 'sysDescr', 0)),
+ ObjectType(ObjectIdentity('SNMPv2-MIB', 'sysLocation', 0)))),
# N-th target
# ...
)
+
class Worker(Thread):
def __init__(self, requests, responses):
Thread.__init__(self)
@@ -65,21 +67,18 @@ class Worker(Thread):
self.responses = responses
self.setDaemon(True)
self.start()
-
+
def run(self):
while True:
authData, transportTarget, varBinds = self.requests.get()
self.responses.append(
- next(
- getCmd(
- self.snmpEngine,
- authData, transportTarget, ContextData(), *varBinds
- )
- )
+ next(getCmd(self.snmpEngine,
+ authData, transportTarget, ContextData(), *varBinds))
)
if hasattr(self.requests, 'task_done'): # 2.5+
self.requests.task_done()
+
class ThreadPool:
def __init__(self, num_threads):
self.requests = Queue(num_threads)
@@ -90,7 +89,8 @@ class ThreadPool:
def addRequest(self, authData, transportTarget, varBinds):
self.requests.put((authData, transportTarget, varBinds))
- def getResponses(self): return self.responses
+ def getResponses(self):
+ return self.responses
def waitCompletion(self):
if hasattr(self.requests, 'join'):
@@ -99,29 +99,26 @@ class ThreadPool:
from time import sleep
# this is a lame substitute for missing .join()
# adding an explicit synchronization might be a better solution
- while not self.requests.empty():
- sleep(1)
+ while not self.requests.empty():
+ sleep(1)
+
pool = ThreadPool(3)
# Submit GET requests
for authData, transportTarget, varBinds in targets:
pool.addRequest(authData, transportTarget, varBinds)
-
+
# Wait for responses or errors
pool.waitCompletion()
# Walk through responses
for errorIndication, errorStatus, errorIndex, varBinds in pool.getResponses():
- print('Response for %s from %s:' % (authData, transportTarget))
if errorIndication:
print(errorIndication)
elif errorStatus:
- print('%s at %s' % (
- errorStatus.prettyPrint(),
- errorIndex and varBinds[int(errorIndex)-1][0] or '?'
- )
- )
+ print('%s at %s' % (errorStatus.prettyPrint(),
+ errorIndex and varBinds[int(errorIndex) - 1][0] or '?'))
else:
for varBind in varBinds:
- print(' = '.join([ x.prettyPrint() for x in varBind ]))
+ print(' = '.join([x.prettyPrint() for x in varBind]))