如何在多处理python上进行异常处理
我在python代码中使用多处理。如何在多处理python上进行异常处理,python,exception-handling,python-multiprocessing,pysnmp,Python,Exception Handling,Python Multiprocessing,Pysnmp,我在python代码中使用多处理。 我的python代码导入Pysnmp和多处理。 我的代码有一半时间运行平稳。 但不幸的是,另一半时间我的代码无法工作,并显示异常“pyasn1.error.pyasn1 error:type tagset”。 我的代码首先创建了一个包含多个线程的“multiprocessing.dummy.Pool(numOfThreads)”。 然后它调用“p.map(sendSNMPGet,[ipRange+'.+str(x)for x in range(1256)]”,
我的python代码导入Pysnmp和多处理。
我的代码有一半时间运行平稳。
但不幸的是,另一半时间我的代码无法工作,并显示异常“pyasn1.error.pyasn1 error:type tagset”。
我的代码首先创建了一个包含多个线程的“multiprocessing.dummy.Pool(numOfThreads)”。
然后它调用“p.map(sendSNMPGet,[ipRange+'.+str(x)for x in range(1256)]”,该函数将函数“sendSNMPGet”作为线程函数,并使用值“1-255”调用函数255次。
这是我的代码:
from pysnmp.entity.rfc3413.oneliner import cmdgen
from pysnmp.proto.rfc1902 import Integer, IpAddress, OctetString
import multiprocessing.dummy
import multiprocessing
def SNMPGet(ip, community, oid, version = 1):
generator = cmdgen.CommandGenerator()
comm_data = cmdgen.CommunityData('server', community, version) # 1 means version SNMP v2c
transport = cmdgen.UdpTransportTarget((ip, 161),timeout=0.5,retries=2)
real_fun = getattr(generator, 'getCmd')
res = (errorIndication, errorStatus, errorIndex, varBinds)\
= real_fun(comm_data, transport, oid)
if (errorStatus == 2): #Is there an EndOfMib() Error
return
elif (errorIndication is None or errorStatus is True):
with open("Maprinter.txt", "a") as myfile: myfile.write("Date is: " + datetime.datetime.now().strftime("%d-%m-%Y %H:%M:%S") + " IP is: " + ip + ", Response: %s\n" % varBinds)
print("IP is: " + ip + ", Response: %s\n" % varBinds)
return
def sendSNMPGet(ip):
return SNMPGet(ip, 'public', '1.3.6.1.2.1.43.5.1.1.1.1', 1)
def snmp_range(ipRange, start, end):
num_threads = 4 * multiprocessing.cpu_count()
p = multiprocessing.dummy.Pool(num_threads)
p.map(sendSNMPGet, [ipRange + '.' + str(x) for x in range(start,end)])
def GetIpsRange(ips):
print('starting scan')
if __name__ == "__main__":
if(ips != ''): #if there are ips in registry
for ip in range(len(ips)):
snmp_range(ips[ip], 1, 256)
print('ending scan')
GetIpsRange('10.0.0')
尽管使用了Pysnmp,但我认为我的异常是由于缺乏正确的多处理编码而发生的。
如何更改代码以处理此异常,或者更好地防止其发生 调试的第一条规则:
假设问题出在您的代码中
。完整的异常对象和回溯可能有助于确定异常抛出的确切位置。