Python pysnmp是线程安全的吗?

Python pysnmp是线程安全的吗?,python,networking,thread-safety,snmp,pysnmp,Python,Networking,Thread Safety,Snmp,Pysnmp,如果我想使用cmdgen.CommandGenerator().nextCmd()执行并发线程,线程安全吗 当我测试它时,我没有看到表明有问题的问题;但是,我以前没有运行过线程,这些查询的结果将用于做出业务决策,因此我希望获得有关的线程安全的最终答案 从线程导入线程 导入时间 #请参阅问题底部的SNMP.py模块 从SNMP导入v2c SNMP类线程(线程): def uuu init uuuu(self,address='127.0.0.1',oid='sysDescr'): 线程。\uuuu

如果我想使用
cmdgen.CommandGenerator().nextCmd()
执行并发线程,线程安全吗

当我测试它时,我没有看到表明有问题的问题;但是,我以前没有运行过线程,这些查询的结果将用于做出业务决策,因此我希望获得有关的线程安全的最终答案

从线程导入线程
导入时间
#请参阅问题底部的SNMP.py模块
从SNMP导入v2c
SNMP类线程(线程):
def uuu init uuuu(self,address='127.0.0.1',oid='sysDescr'):
线程。\uuuu初始化\uuuuu(自)
self.address=地址
self.oid=oid
self.results=无
def运行(自):
self.snmp=v2c(self.address)
self.results=self.snmp.walk(self.oid)
如果“名称”=“\uuuuuuuu主要”:
managers=set()
完成=设置()
开始=时间。时间()
地址['172.25.116.20'、'172.25.116.21'、'172.25.116.22',
'172.25.116.5']:
打印“调用%s(地址=%s)”%(“SNMP线程”,地址)
poll=SNMP\u Walk\u线程(地址=addr)
poll.start();添加(投票)

while(len(finished)如果您在各自的线程中运行专用的CommandGenerator实例,pysnmp应该是MT安全的。最新的pysnmp版本(4.2.2)有相关的修复程序

<>我会考虑下面的代码更改:

  • 在每个线程中使用一个长期存在的CommandGenerator实例,这将在初始化时保护大量CPU
  • 如果您只需要一个SNMP v2c,那么重新编写您的应用程序以使用较低级别的SNMPv1 API可能是值得的-这将几乎消除所有关键部分或将它们置于您的控制之下,性能也将得到提高-

关于长寿命的
CommandGenerator()
实例的一个好观点。我改变了这一点(以及从4.2.1升级到4.2.2),并看到“sysDescr.0”的轮询时间从5秒增加到2.5秒多一点。我将深入研究您提到的低级GETNEXT实现示例,以寻找增量收益。