首页 > 解决方案 > 检查数千个网址的最快方法是什么?

问题描述

我需要检查至少 20k url 以检查 url 是否已启动并将一些数据保存在数据库中。

我已经知道如何检查 url 是否在线以及如何在数据库中保存一些数据。但是如果没有并发,检查所有 url 需要很长时间,那么检查数千个 url 的最快方法是什么?

我正在关注本教程:https ://realpython.com/python-concurrency/似乎“CPU-Bound multiprocessing Version”是最快的方法,但我想知道这是最快的方法还是有更好的选择。

编辑:

根据回复,我将更新比较多处理和多线程的帖子

示例 1:打印“你好!” 40次

穿线

8核多处理:

如果你使用 8 个线程,线程会更好

示例2,我的问题中提出的问题:

经过多次测试,如果您使用超过 12 个线程,线程会更快。例如,如果您想测试 40 个 url,并且使用 40 个线程的线程,它将比 8 核的多处理快 50%

谢谢你的帮助

标签: pythonconcurrencypython-requests

解决方案


我认为你应该使用 pool: pool docs

基于这里的一些结果:mp vs threading SO

我会说总是使用多处理。也许如果您希望您的请求需要很长时间才能解决,那么线程的上下文切换优势将克服多处理的蛮力

就像是

import multiprocessing as mp
urls=['google.com', 'yahoo.com']

with mp.Pool(mp.cpu_count()) as pool:

        results=pool.map(fetch_data, urls)

编辑:为了解决关于一组子进程的评论,我已经展示了如何请求进程等于你的逻辑线程数


推荐阅读