【问题标题】:python 3.4 multiprocessingpython 3.4 多处理
【发布时间】:2015-02-10 21:40:25
【问题描述】:

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

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

目前我正在检查 5000 到 900 万个 IP 地址,它需要几个小时,大约 4 来返回所有结果。

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

我是 python 新手,所以如果我忽略了一些我应该忽略的东西,请告诉我。

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

http://pastebin.com/kh65hYhG

【问题讨论】:

  • 多处理可能是一个不错的选择,使用可连接队列来取回数据。但这可能并不比子进程好,具体取决于您运行它的方式。你在等待每个完成吗?
  • 我已经用我正在使用的当前代码更新了主帖子,这需要很长时间。

标签: python python-3.x python-multithreading python-multiprocessing


【解决方案1】:

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

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

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

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

【讨论】:

    【解决方案2】:
    猜你喜欢
    • 2014-10-28
    • 1970-01-01
    • 1970-01-01
    • 2017-05-24
    • 2015-01-10
    • 2015-12-10
    • 1970-01-01
    • 1970-01-01
    • 2016-02-24
    相关资源
    最近更新 更多