提高 python 脚本的吞吐量

2024-04-13

我正在通过 dig 处理来自 DNSBL 的数千个域名列表,创建 URL 和 IP 的 CSV。这是一个非常耗时的过程,可能需要几个小时。我的服务器的 DNSBL 每十五分钟更新一次。有没有办法可以提高 Python 脚本的吞吐量以跟上服务器的更新步伐?

Edit:脚本,根据要求。

import re
import subprocess as sp

text = open("domainslist", 'r')
text = text.read()
text = re.split("\n+", text)

file = open('final.csv', 'w')

for element in text:
        try:
            ip = sp.Popen(["dig", "+short", url], stdout = sp.PIPE)
            ip = re.split("\n+", ip.stdout.read())
            file.write(url + "," + ip[0] + "\n")
        except:
            pass

嗯,可能是名称解析花了你这么长时间。如果你算出来(即,如果以某种方式 dig 很快返回),Python 应该能够轻松处理数千个条目。

也就是说,您应该尝试线程方法。 (理论上)这将同时解析多个地址,而不是依次解析。您也可以继续使用 dig 来实现这一点,为此修改下面的示例代码应该是微不足道的,但是,为了让事情变得有趣(并且希望更加 Pythonic),让我们使用现有的模块来实现这一点:dnspython http://www.dnspython.org

因此,安装它:

sudo pip install -f http://www.dnspython.org/kits/1.8.0/ dnspython

然后尝试如下所示:

import threading
from dns import resolver

class Resolver(threading.Thread):
    def __init__(self, address, result_dict):
        threading.Thread.__init__(self)
        self.address = address
        self.result_dict = result_dict

    def run(self):
        try:
            result = resolver.query(self.address)[0].to_text()
            self.result_dict[self.address] = result
        except resolver.NXDOMAIN:
            pass


def main():
    infile = open("domainlist", "r")
    intext = infile.readlines()
    threads = []
    results = {}
    for address in [address.strip() for address in intext if address.strip()]:
        resolver_thread = Resolver(address, results)
        threads.append(resolver_thread)
        resolver_thread.start()

    for thread in threads:
        thread.join()

    outfile = open('final.csv', 'w')
    outfile.write("\n".join("%s,%s" % (address, ip) for address, ip in results.iteritems()))
    outfile.close()

if __name__ == '__main__':
    main()

如果事实证明同时启动了太多线程,您可以尝试分批执行,或使用队列(请参阅http://www.ibm.com/developerworks/aix/library/au-threadingpython/ http://www.ibm.com/developerworks/aix/library/au-threadingpython/举个例子)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

提高 python 脚本的吞吐量 的相关文章

  • Flask中使用的路由装饰器是如何工作的

    我熟悉 Python 装饰器的基础知识 但是我不明白这个用于 Flask 路由的特定装饰器是如何工作的 以下是 Flask 网站上的代码片段 from flask import Flask escape request app Flask
  • LibreOffice 并行将 .docx 转换为 .pdf 效果不佳

    我有很多 docx 文件需要转换为 pdf 将它们一一转换需要很长时间 所以我编写了一个 python 脚本来并行转换它们 from subprocess import Popen import time import os os chdi
  • 指示电子邮件的类型

    我有以下自动化程序 它将电子邮件发送给我自己 并添加了特定的链接 import win32com client as win32 import easygui import tkinter as to from tkinter import
  • 数据框 - 平均列

    我在 pandas 中有以下数据框 Column 1 Column 2 Column3 Column 4 2 2 2 4 1 2 2 3 我正在创建一个数据框 其中包含第 1 列和第 2 列 第 3 列和第 4 列等的平均值 ColumnA
  • 如何使用 UNIX shell 计算字母在文本文件中出现的次数?

    我有几个文本文件 我想计算每个字母在每个文件中出现的次数 具体来说 我想使用 UNIX shell 来执行此操作 形式为 cat file 做东西 有没有办法让 wc 命令来执行此操作 grep char o filename wc l
  • 从 pyspark.sql 中的列表创建数据框

    我完全陷入了有线的境地 现在我有一个清单li li example data map lambda x get labeled prediction w x collect print li type li 输出就像 0 0 59 0 0
  • 为什么第二个 request.session cookies 返回空?

    我想使用 requests Session post 登录网站 但是当我已经登录主页 然后进入帐户页面时 看来cookies还没有保存 因为cookies是空的 而且我无法进入正确的帐户页面 import requests from bs4
  • 使用 Pytest 的参数化添加测试功能的描述

    当其中一个测试失败时 可以在测试正在测试的内容的参数化中添加描述 快速了解测试失败的原因 有时您不知道测试失败的原因 您必须查看代码 通过每个测试的描述 您就可以知道 例如 pytest mark parametrize num1 num2
  • OpenCV 跟踪器:模型未在函数 init 中初始化

    在视频的第一帧 我运行一个对象检测器 它返回对象的边界框 如下所示
  • python 中的 h2o 框架子集

    如何在 python 中对 h2o 框架进行子集化 如果 x 是一个 df 并且 Origin 是一个变量 那么在 pandas 中我们通常可以通过以下方式进行子集化 x x Origin AAF 但使用 h2o 框架会出现以下错误 H2O
  • 在 Mac OS X 上安装 libxml2 时出现问题

    我正在尝试在我的 Mac 操作系统 10 6 4 上安装 libxml2 我实际上正在尝试在 Python 中运行 Scrapy 脚本 这需要我安装 Twisted Zope 现在还需要安装 libxml2 我已经下载了最新版本 2 7 7
  • App Engine 实体到字典

    将 google app engine 实体 在 python 中 复制到字典对象的好方法是什么 我正在使用 db Expando 对象 所有属性均为扩展属性 Thanks 有一个名为foo尝试 foo dict
  • Flask 应用程序路由中的多个参数

    烧瓶怎么写app route如果我在 URL 调用中有多个参数 这是我从 AJax 调用的 URL http 0 0 0 0 8888 createcm summary VVV change Feauure 我试图写我的烧瓶app rout
  • 检索 geodjango 多边形对象的边界框

    如何在 geodjango 中获取 MultiPolygon 对象的边界框 在 API 中找不到任何内容http geodjango org docs geos html http geodjango org docs geos html
  • 使用seaborn绘制简单线图

    我正在尝试使用seaborn python 绘制ROC曲线 对于 matplotlib 我只需使用该函数plot plt plot one minus specificity sensitivity bs where one minus s
  • 确定分割形状几何体的“左”侧和“右”侧

    我的问题是 我怎样才能确定哪一个Aside and Bside的侧面已经分割的旋转矩形几何体 http nbviewer jupyter org urls dl dropbox com s ll3mchnx0jwzjnf determine
  • 高效创建抗锯齿圆形蒙版

    我正在尝试创建抗锯齿 加权而不是布尔 圆形掩模 以制作用于卷积的圆形内核 radius 3 no of pixels to be 1 on either side of the center pixel shall be decimal a
  • Jupyter Notebook:带有小部件的交互式绘图

    我正在尝试生成一个依赖于小部件的交互式绘图 我遇到的问题是 当我使用滑块更改参数时 会在前一个绘图之后完成一个新绘图 而我预计只有一个绘图会根据参数发生变化 Example from ipywidgets import interact i
  • 如何使用xlwt设置文本颜色

    我无法找到有关如何设置文本颜色的文档 在 xlwt 中如何完成以下操作 style xlwt XFStyle bold font xlwt Font font bold True style font font background col
  • 如何通过点击复制 folium 地图上的标记位置?

    I am able to print the location of a given marker on the map using folium plugins MousePosition class GeoMap def update

随机推荐

  • Git 1.8:推送错误:dst ref refs/heads/master 从多个 src 接收

    git 1 8 的另一个问题 git push error dst ref refs heads master receives from more than one src error failed to push some refs t
  • 如何使用加密的 DLQ 将重新驱动策略添加到 SNS

    我有一个 SNS 用 KMS 加密 由两个 lambda 订阅 我正在尝试向其中一项订阅添加重新驱动策略 相关 DLQ 已加密 添加重新驱动策略会出现错误 无法检查 Amazon SQS 队列权限 确保队列存在并且您的帐户有权读取队列的属性
  • 捏合 MKMapView 时保持中心坐标

    如果您在跟踪设备位置时在 Apple 地图应用程序中进行捏合放大 缩小 则捏合手势的 平移 部分将被忽略 蓝色位置指示器将保持固定在屏幕中央 使用普通的时情况并非如此MKMapView 假设我已经有了用户的位置 我怎样才能达到这个效果呢 我
  • 如何对多种文件类型使用 grep --include 选项?

    当我想 grep 某个目录中的所有 html 文件时 我执行以下操作 grep include html pattern R some path 效果很好 问题是如何grep某个目录中的所有html htm php文件 由此使用 grep
  • Android中如何使用Intent在Activity之间传递值?

    我想将一个活动类别中的位置值传递给另一个活动类别 我的代码如下 protected void onListItemClick ListView listView View v int position long id switch posi
  • Swing UI 线程是何时创建的?

    在运行 Swing 程序的过程中 什么时候 UI 线程 事件调度线程 EDT 首先产生 想必任何给定的 JVM 都可以做任何它想做的事 例如 始终在启动时生成 EDT 无论 或从未使用过 但作为一个实际问题 当 通常会创建 EDT 吗 它是
  • 如何使用 NHibernate 的 criteria api 和实体查询子属性以仅加载与谓词条件匹配的子属性

    假设如下 public class Order public virtual int OrderId get set public virtual ISet
  • 向由 proc_open() 打开的进程发送信号

    我们这里有一个实用程序正在使用proc open 调用 ssh 在远程计算机上运行命令 然而 在某些情况下 我们需要停止远程机器上的命令 但是proc close and proc terminate 不要将所需的信号发送到 ssh 连接的
  • 在 Typescript 中为“this”关键字键入注释

    我有一个独立的函数 旨在使用提供的上下文Function prototype call 例如 function foo return this bar gt foo call bar baz baz 有没有办法为以下内容提供 Typescr
  • 连接两个表并使用 where 子句过滤它们

    我在获取所需的 SQL 输出时遇到问题 我有两个这样的表 tblOrder ID User Status 1 1 0 2 1 0 3 2 1 表订单项 ID OrderID Product Quantity 1 1 A 2 2 1 B 1
  • 在实体框架代码优先中,为什么主键总是存储为聚集索引?

    我正在更多地了解一般索引 特别是聚集索引 在 Markus Winand 的这篇文章中 http use the index luke com blog 2014 01 unreasonable defaults primary key c
  • 如何将两个已排序数组合并为一个已排序数组? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 这是我在采访中被问到的问题 这是我提供的解决方案 public static int merge int a int b int an
  • 如何共享App.config?

    如何在 Visual Studio 解决方案中的多个项目之间共享 链接 App config 或 Web config In the 添加现有项目从 Visual Studio 获得的对话框解决方案浏览器 您可以将磁盘上另一个文件的链接添加
  • 将文件的路径位置更改为所需路径

    我想将文件中定义的内容路径 即logging properties 替换为jboss7位置的所需位置路径 基本上我正在使用安装程序 我必须浏览我的 jboss7 文件夹并将其定位到用户所需的任何位置 但在 jboss7 的几个文件中 有一些
  • 如何编辑swift错误断点?

    我想设置 Swift 错误断点来处理 Swift Error错误类型迅速 但我没有得到 What to set as Type value in BreakPoint 如果您只是创建一个 Swift 错误断点 它会在任何符合 ErrorTy
  • 为什么ostringstream在多线程环境下不能很好的工作

    也许有些事情很奇怪 当我在多线程环境中使用STL ostringstream 类时 我发现每个线程的执行时间随着线程数量的增加而线性增加 我不知道为什么会这样 我尝试检查 ostringstream 源代码 但找不到任何同步代码 ostri
  • 在android中围绕两个手指的中点缩放

    我有一个HorizontalScrollView其中有多个视图 我已经实施了pinch zoom gesture其中我的两根手指之间的多个视图被缩放 但我面临一个小问题 当我进行捏缩放时 捏缩放的中点正在移动 但为了用户体验 我希望该点保持
  • Next.js 从 Docker 容器无限重载

    我正在尝试制作一个简单的 Next js 应用程序 它使用 Firebase 身份验证并从 Docker 容器运行 以下内容在本地运行良好 从构建的 docker 容器运行 然而 当我部署到 Heroku 或 Google Cloud Ru
  • UIImageView 的触摸向上和触摸向下操作

    我想要实现的是 当用户触摸 UIImageView 时设置 Image1 当用户抬起手指时设置 Image2 我只能用此代码获取 UIGestureRecognizerState Ended var tap UITapGestureReco
  • 提高 python 脚本的吞吐量

    我正在通过 dig 处理来自 DNSBL 的数千个域名列表 创建 URL 和 IP 的 CSV 这是一个非常耗时的过程 可能需要几个小时 我的服务器的 DNSBL 每十五分钟更新一次 有没有办法可以提高 Python 脚本的吞吐量以跟上服务