[英]python 3.4 multiprocessing
这个问题是在寻求建议以及一些代码的帮助。
我目前正在使用3.4来学习Python,我已经构建了一个基本的网络检查工具,我从文本文件中导入项目,对于每个项目,我都希望python检查dns(使用pydns),对ip进行ping(使用子进程来调用OS本机ping) )。
目前,我正在检查5000到9000千个IP地址,它花费了几个小时,大约需要4个小时才能返回所有结果。
我想知道我是否可以使用多处理或线程来加快速度,但仍将输出返回到列表,以便可以在脚本的末尾将行批量写入csv文件。
我是python的新手,所以请告诉我我是否也忽略了某些东西。
您可以使用多个线程来运行子进程(在您的情况下为ping
)并收集其输出,但这不是必需的 。 这是一个代码示例,说明如何使用线程池发出多个http请求 。 这是使用concurrent.futures
dns请求的代码 。
您不需要多个线程/进程来检查5000-9000个IP(DNS,ICMP)。 您可以使用gevent
, twisted
, asyncio
在同一过程中建立网络连接 。
由于大多数工作似乎都是基于IO的,因此您可以轻松地依赖线程。
看看cocurrent.futures中的Executor.map()函数: https : //docs.python.org/3/library/concurrent.futures.html
您可以传递IP列表以及要针对每个元素运行的函数,返回的值实际上是给定函数的结果列表。
在您的特定情况下,您可以将两个工作程序的方法(check_dns_ip和os_ping)包装在一个方法中,并将其传递给ThreadPoolExecutor.map函数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.