使用 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 中使用三个命令重写配置文件:
- ››使用脚本恢复WinXP系统的用户登录密码
- ››使用phpMyadmin创建数据库及独立数据库帐号
- ››使用Zend Framework框架中的Zend_Mail模块发送邮件...
- ››使用cout标准输出如何控制小数点后位数
- ››使用nofollow标签做SEO的技巧
- ››使用 WebSphere Message Broker 的 WebSphere Tra...
- ››使用SQL Server事件探查器做应用程序的性能分析
- ››使用SQL Server事件探查器分析死锁原因
- ››实现基于OPhone 2.0的GTalk客户端
- ››实现可编辑下拉框的ComboBox asp.net控件方法
- ››实现AjaxPro的方法
- ››使用纯文本文件打造WCF服务
更多精彩
赞助商链接