我尝试使用SNMP对网络内的大约8,000台主机进行扫描,以确定它们是否有任何桥接网络接口(我在ISP工作,这是内部设备跟踪)。通过从我们的路由器中提取ARP表获取所有网络设备的列表后,我需要扫描每个主机,这是一个低CPU任务,主要是等待网络延迟。所以,我使用multiprocessing.Pool来产生50个工人,并让他们扫描一下。一切都很好,但几分钟后(扫描中没有一致),进程被杀死,我得到一个核心转储。我真的不确定为什么它会在这一点上崩溃。我只能假设内核(OpenBSD)对这一大堆进程感到生气。任何人都知道如何让扫描运行?
相关代码(它在网络类定义中,但大多数应该是无关紧要的。):
from multiprocessing import Pool
from Host import Host
def getHosts(self, ips):
pool = Pool(50)
self.hosts = pool.map(initHost, ips)
return self.hosts
def initHost(ip):
host = Host(ip)
host.getInterfaces() # Runs a scan via EasySNMP
return host
如果有必要,我也可以发布Host类中的代码,但它只是一些SNMP和属性管理的东西,而且当它不是集体时它工作正常,所以我不# 39;想象它是问题的根源。
感谢任何帮助。