在 pysnmp 中重用 getCmd 对象
Reuse getCmd object in pysnmp
在 pysnmp 文档中有一个 getCmd class,我想知道是否可以只实例化一次 class 并在以后通过传递新的 oid 来重用它。我不确定 getCmd class 是否公开了允许我更改 oid 的方法。
http://pysnmp.sourceforge.net/docs/hlapi/asyncore/sync/manager/cmdgen/getcmd.html
getCmd 名称指的是函数,而不是 class。从技术上讲,它是一个生成器,但这在这里并不重要。
调用 *Cmd() 的成本很低,因为所有繁重的工作和状态管理都是在 SnmpEngine 对象(getCmd 的第一个参数)上完成的。因此,从性能的角度来看,保持 SnmpEngine 对象尽可能持久是很重要的。
>>> from pysnmp.hlapi.asyncore import *
>>> snmpEngine = SnmpEngine()
>>> for oid in ['1.3.6.1.2.1.2.2.1.8.1', '1.3.6.1.2.1.2.2.1.8.2']:
... g = getCmd(snmpEngine,
... CommunityData('public'),
... UdpTransportTarget(('demo.snmplabs.com', 161)),
... ContextData(),
... ObjectType(ObjectIdentity(oid)))
>>> print(next(g))
在 pysnmp 文档中有一个 getCmd class,我想知道是否可以只实例化一次 class 并在以后通过传递新的 oid 来重用它。我不确定 getCmd class 是否公开了允许我更改 oid 的方法。
http://pysnmp.sourceforge.net/docs/hlapi/asyncore/sync/manager/cmdgen/getcmd.html
getCmd 名称指的是函数,而不是 class。从技术上讲,它是一个生成器,但这在这里并不重要。
调用 *Cmd() 的成本很低,因为所有繁重的工作和状态管理都是在 SnmpEngine 对象(getCmd 的第一个参数)上完成的。因此,从性能的角度来看,保持 SnmpEngine 对象尽可能持久是很重要的。
>>> from pysnmp.hlapi.asyncore import *
>>> snmpEngine = SnmpEngine()
>>> for oid in ['1.3.6.1.2.1.2.2.1.8.1', '1.3.6.1.2.1.2.2.1.8.2']:
... g = getCmd(snmpEngine,
... CommunityData('public'),
... UdpTransportTarget(('demo.snmplabs.com', 161)),
... ContextData(),
... ObjectType(ObjectIdentity(oid)))
>>> print(next(g))