Python 3.4 的多进程技术

4
这个问题既需要建议,又需要一些代码的帮助。
我目前正在学习Python 3.4。我已经建立了一个基本的网络检查工具,从文本文件中导入项目,对于每个项目,我希望Python能够使用pydns检查DNS,并使用子进程调用操作系统本地ping来ping IP。
目前我正在检查5000到9000个IP地址,这需要几个小时,大约4个小时才能返回所有结果。
我想知道是否可以使用多进程或线程来加速此过程,但仍然将输出返回到列表中,以便在脚本的最后一次批量写入行到CSV文件中。
由于我是Python新手,请告诉我是否有什么我也应该注意的东西。
主要代码: http://pastebin.com/ZS23XrdE 类: http://pastebin.com/kh65hYhG

多进程可能是一个不错的选择,使用可连接队列来获取数据。但这也许并不比子进程更好,这要取决于你如何运行它。你是否在等待每个进程完成? - cdarke
我已经更新了主贴,附上了我目前正在使用的代码,但是它运行时间很长。 - clonerworks
2个回答

1

0

由于大部分工作都是基于IO的,因此您可以轻松地依赖线程。

请查看concurrent.futures中Executor.map()函数: https://docs.python.org/3/library/concurrent.futures.html

您可以传递IP列表和要针对每个元素运行的函数,返回值实际上是给定函数结果的列表。

在您的特定情况下,您可以将两个工作方法(check_dns_ip和os_ping)包装在一个单独的方法中,并将其传递给ThreadPoolExecutor.map函数。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接