使用 Python 实现多进程
2010-09-22 11:23:22 来源:WEB开发网这里有两个类,一个 HostRecord 类和一个 SnmpSession 类。SnmpSession 类包含一个使用 Net-SNMP 的 SNMP 库实际执行查询的方法。由于调用一般都会进行阻塞,因此需要导入多进程库并使用 Process 运行它。此外,传入一个 task_queue 和一个 done_queue,这样可以同步并保护进出进程池的数据。如果对线程比较熟悉的话,将会注意到这种方式非常类似于线程 API 使用的方法。
需要特别关注一下主函数中 #clients 部分的主机列表。注意,可以对 50 或 100 台或更多主机运行异步 SNMP 查询,具体取决于当前使用的硬件。NUMBER_OF_PROCESSES 变量的设置非常简单,只是被设置为主机列表中的主机数。最终,最后两个部分在处理过程中从队列获取结果,然后将一个 “STOP” 消息放到队列中,表示可以终止进程。
如果在对 Net-SNMP 进行监听的 OS X 机器上运行代码,那么将会得到如下所示的非阻塞输出:
mac% time python multisnmp.py
Unordered results:
('Darwin mac.local 9.6.0 Darwin Kernel Version 9.6.0: Mon Nov 24 17:37:00 PST 2008;
root:xnu-1228.9.59~1/RELEASE_I386 i386',)
('Darwin mac.local 9.6.0 Darwin Kernel Version 9.6.0: Mon Nov 24 17:37:00 PST 2008;
root:xnu-1228.9.59~1/RELEASE_I386 i386',)
Stopping Process #0
Stopping Process #1
python multisnmp.py 0.18s user 0.08s system 107% cpu 0.236 total
配置 OS X 的 SNMPD
如果希望配置 OS X 的 SNMP Daemon 以针对本文进行测试,那么需要执行下面的操作。首先,在 shell 中使用三个命令重写配置文件:
更多精彩
赞助商链接