微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 Python3 发送 100,000 个 Web 请求的最快方法是什么?

如何解决使用 Python3 发送 100,000 个 Web 请求的最快方法是什么?

我有大约 100,000 个 URL 列表。所有都在同一个域中,并具有不同的子目录。 检查此 100,000 个 URL 列表的状态代码的最快方法是什么? 我目前正在使用线程和 PyCurl 发出请求,如下所示。如何更有效地创建线程并更快地发出 Web 请求?

import pycurl
import certifi

from threading import Thread

def req(url,counter):
    try:
        curl = pycurl.Curl()
        curl.setopt(pycurl.CAINFO,certifi.where())
        curl.setopt(pycurl.WRITEFUNCTION,lambda x: None)
        curl.setopt(pycurl.CONNECTTIMEOUT,5)
        curl.setopt(pycurl.URL,url)
        curl.perform()
        print(f"Requests: {counter} | URL: {url} | Status Code: {curl.getinfo(pycurl.HTTP_CODE)}")
        curl.close()

    except pycurl.error:
        pass

with open("urllist.txt") as f:
    urls = f.read().splitlines()

counter = 0

while True:
    for url in urls:
        counter += 1
        Thread(target=req,args=(url,counter,)).start()

补充说明,你提出了一个类似的问题,所以我把它链接起来了。

我实际上尝试过这个,而且速度非常快。也许这是最快的“在请求部分”,但它是第一个准备过程吗? 这需要很多时间。

解决方法

您想研究 curl 的多接口,它在同一线程上进行并发传输。即使有 10 万个请求,您也受 I/O 限制。使用多接口后,您可以通过上述内部线程将工作负载分配到更多线程实例中,或者只是启动单独的进程(如果您使用的是 Linux,请参阅 xargs -P 或 GNU Parallel)。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。