多线程Python请求[重复]

2024-02-27

对于我的学士论文,我需要从大约 40000 个网站中获取一些数据。因此,我使用 python 请求,但目前从服务器获取响应非常慢。

有没有办法加快速度并保持当前的标题设置?我发现的所有教程都没有标题。

这是我的代码片段:

def parse(url):
    headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) '
                         'Chrome/39.0.2171.95 Safari/537.36'}
    r = requests.get(url, headers=headers)

    for line in r.iter_lines():
        ...

那么你可以使用线程,因为这是一个I/O 限制问题。使用内置的threading图书馆是您最好的选择。我用的是Semaphore https://docs.python.org/2/library/threading.html#semaphore-objects对象来限制可以同时运行的线程数。

import time
import threading

# Number of parallel threads
lock = threading.Semaphore(2)


def parse(url):
   """
   Change to your logic, I just use sleep to mock http request.
   """

    print 'getting info', url
    sleep(2)

    # After we done, subtract 1 from the lock
    lock.release()


def parse_pool():
    # List of all your urls
    list_of_urls = ['website1', 'website2', 'website3', 'website4']

    # List of threads objects I so we can handle them later
    thread_pool = []

    for url in list_of_urls:
        # Create new thread that calls to your function with a url
        thread = threading.Thread(target=parse, args=(url,))
        thread_pool.append(thread)
        thread.start()

        # Add one to our lock, so we will wait if needed.
        lock.acquire()

    for thread in thread_pool:
        thread.join()

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

多线程Python请求[重复] 的相关文章

随机推荐

  • 具有多列的雄辩 WHERE LIKE 子句

    我正在实现一个搜索栏 可以按名字 姓氏或两者搜索客户 所以 举例来说 Mike Hizer将匹配Mike Hizer zer Mike Hizer等等 这是我想出的 Customer where DB raw concat first na
  • 为 Windows 制作热键最简单的方法是什么?

    For example you push Ctrl V and insert the buffer content into the window How can I create my own hotkeys like that Sorr
  • 在 C#/.NET 中将参数标记为不可为空?

    是否有一个简单的属性或数据契约可以分配给函数参数来阻止null从 C NET 中传递 理想情况下 这也会在编译时进行检查以确保文字null没有在任何地方使用它并且在运行时抛出ArgumentNullException 目前我写的东西像 if
  • Cocos2d for android 支持不同分辨率

    我正在尝试构建一款游戏 并且想知道如何支持不同的分辨率和屏幕尺寸 对于精灵的位置 我实现了一个基本函数 它根据一定的比例设置位置 这是通过从sharedDirector的winSize方法获取屏幕宽度和高度获得的 但这种方法没有经过测试 因
  • 使用 std::fill 用递增的数字填充向量

    我想填写一个vector
  • git status --ignored 无限期挂起

    tl dr 跑步git status ignored在我的项目的根永远不会完成 git status工作正常 我开始从我的 IDE PhpStorm 中看到此问题的症状 尽管此问题适用于所有 IntelliJ IDE 没有与 git 相关的
  • 如何在 TreeTable 的第二列中显示树线

    我正在使用 TreeTable com jidesoft grid 请参阅树表 http www jidesoft com javadoc com jidesoft grid TreeTable html 来显示分层数据 它在第一列上使用特
  • typedef 和模板参数同名

    为什么这种情况不正确 这是合乎逻辑的 template
  • Python物理库? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 是否有适用于 Linux 的 Python 的最新物理库 我刚刚开始使用 PyGame 来学习 Pyt
  • 您如何处理 C# 的新功能,以免它们导致编写出糟糕的代码?

    C 3 0 中引入了许多让我感到不安的功能 例如对象初始值设定项 扩展方法和隐式类型变量 现在 在 C 4 0 中 像动态关键字这样的东西我变得更加担心 我知道这些功能中的每一个CAN以适当的方式使用BUT在我看来 它们使开发人员更容易做出
  • 如何从我的应用程序将信用卡添加到 Google Pay?

    我正在开发移动银行应用程序 显然它管理我们的银行信用卡 所以现在我需要在我的应用程序中实现 将此卡添加到 Google Pay 按钮 但如何为此执行 Google Pay API 请求 我无法找到任何相关文档 这这里只有一个关于 SO 的问
  • 如何知道用户是否已付费订阅

    我正在看这个tutorial https www patchesoft com paypal api subscription php创建我自己的贝宝订阅网关 我以前从未对 API 如此困惑和迷失过 因此 当我们创建计划时 我们会设置商家偏
  • 相同的元组给出不同的泡菜

    这种情况很奇怪 我希望有一些关于 pickle 模块的东西我不知道 我有两个元组s1 and s2 如果我比较它们它会返回True s1 s2 True 如果我腌制它们并比较结果 它会返回False pickle dumps s1 pick
  • Kendo UI 工具提示显示,访问目标?

    可以通过传递参数来访问目标e到匿名函数获取内容 gridToolTipz grid kendoTooltip filter td role gridcell content function e var target e target th
  • SOAP 和 REST 如何与 XML/JSON 响应配合使用?

    这是一个在堆栈溢出时一次又一次被问到的非常常见的问题 我读了很多关于这个问题的答案 但我仍然有点困惑 我需要从 iPhone sdk 调用网络服务 这是我的问题 我不清楚 SOAP 或 REST 返回什么响应 是否有什么具体说明 如果响应是
  • 是否有布尔值的后赋值运算符?

    你好 Java 中可能有这样的事情吗 boolean flag true if flag return flag false return true and assign false to flag afterwards 澄清 上面的方法有
  • 在 redshift postgresql 中我可以使用复制功能跳过列吗

    我有一个 csv 表 t1 其中包含以下列 亚马逊 S3 存储中的 c1 c2 c3 我想将其复制到亚马逊红移中 我创建包含以下列的表 c1 c2 c3 其中所有列均可为空 我用命令复制 复制 t1a c1 c3 从 t1 我预计它会从 t
  • 本地网络上的 WebRTC? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我一直在阅读有关 WebRTC 的内容 它看起来非常有前途 我想制作一个简单的局域网游戏 自动连接同一网络上的人们 尽管我可以找到人们
  • 此电子邮件验证正则表达式中不可打印控制字符的用途是什么?

    背景资料 我们使用 SonarQube 来获取有关代码库的质量指标 根据规则 SonarQube 在我们的 Node js 代码库中标记了十多个错误S6324 https rules sonarsource com javascript R
  • 多线程Python请求[重复]

    这个问题在这里已经有答案了 对于我的学士论文 我需要从大约 40000 个网站中获取一些数据 因此 我使用 python 请求 但目前从服务器获取响应非常慢 有没有办法加快速度并保持当前的标题设置 我发现的所有教程都没有标题 这是我的代码片