首页 > 解决方案 > 如何优化这些请求?

问题描述

此代码生成 13k url,然后检查 response = 200。我必须检查每一个,因为没有其他方法可以知道它们是否存在。如果是则继续下载图像。

它还会检查图像是否已存在于文件夹中。它正在工作,但需要几个小时才能完成。

我正在使用请求shutilostqdm。我是 python 的新手,我正在研究并发现asyncioaiohttp看了几个教程,但没能成功。

def downloader(urls):
    for i in tqdm(urls):
        r = requests.get(i, headers=headers, stream=True)
        if r.status_code == 200:
            name, path = get_name_path(i)
            if check_dupe(name) == False:
                save_file(path, r)
                
folder_path = create_dir()
urls = generate_links()
downloader(urls)

标签: pythonpython-requests

解决方案


你也可以python ray

您可以按照以下步骤操作:创建 n 个工人,例如 10 个。

worker = 10.

将 url 分配给例如 n_number 个工人不同的列表 ()。您可以使用 numpy 并为此使用 np.arraysplit 函数

distributed_urls = np.array_split(url_lists, worker)

开始射线

ray.init(num_cpus = workers)

做射线遥控

@ray.remote(max_calls=1)
def worker(urls_ls)
  downloader(urls = urls_ls)

all_workers = []
for index, i in enumerate(range(workers)):
  all_workers.append(worker.remote(distributed_urls[index])

ray.get(all_workers)

通过这样做,您可以将工作负载分配给 10 个不同的工作人员。您可以根据可用资源分配任意数量的工作人员。

您可以在此处查看更多详细信息:https ://ray.io/


推荐阅读