python 3.4 multiprocessing



这个问题正在寻求建议以及一些代码的帮助。

我目前正在学习 Python 3.4我已经构建了一个基本的网络检查工具,我从文本文件中导入项目,对于每个项目,我希望 python 检查 dns(使用 pydns),ping ip(使用子进程调用操作系统本机 ping)。

目前,我正在检查5000到9000,000个IP地址,并且需要几个小时,大约需要4个小时才能返回所有结果。

我想知道我是否可以使用多处理或线程来加快速度,但仍然将输出返回到列表,以便可以将该行批量写入脚本末尾的 csv 文件。

我是python的新手,所以请告诉我我是否也忽略了一些我应该做的事情。

主代码http://pastebin.com/ZS23XrdE

类http://pastebin.com/kh65hYhG

您可以使用

多个线程来运行子进程(在您的情况下ping)并收集它们的输出,但这不是必需的。下面是如何使用线程池发出多个 http 请求的代码示例。下面是使用 concurrent.futures 并发发出 DNS 请求的代码。

您不需要多个线程/进程来检查 5000-9000 个 IP(DNS、ICMP)。您可以使用geventtwisted asyncio在同一进程中建立网络连接。

由于大多数工作似乎都是基于 IO 的,因此您可以轻松地依赖 Threads。

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

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

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

相关内容

  • 没有找到相关文章

最新更新