python - 如何优化这些请求?
问题描述
此代码生成 13k url,然后检查 response = 200。我必须检查每一个,因为没有其他方法可以知道它们是否存在。如果是则继续下载图像。
它还会检查图像是否已存在于文件夹中。它正在工作,但需要几个小时才能完成。
我正在使用请求shutil
,os
和tqdm
。我是 python 的新手,我正在研究并发现asyncio
,aiohttp
看了几个教程,但没能成功。
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)
解决方案
你也可以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/
推荐阅读
- wildfly - 更新我的耳朵依赖项以匹配新 Wildfly 版本的模块
- listview - ListView在android kotlin中的不同视图
- asp.net-core - 当具有大记录的导航/嵌套属性然后在 EnableQueryAttribute 中指定页面大小时,OData 引发错误
- connection-pooling - 通过 tomcat 8.5 连接到 Oracle8 的选项
- database-design - 初学者 AppleScript Writer:使用循环将许多变量写入脚本
- html - 我可以更改 notion.so 页面的 OG 标签吗?
- php - PHP OOP AJAX,从控制器获取错误
- html - 我有一个表单页面,我想从中发送电子邮件,但是
- python - 在函数内调用函数不能正常工作
- pycharm - 如何强制标签的单行格式?