【发布时间】:2019-06-13 20:23:45
【问题描述】:
我正在尝试在 python 中并行化数千次下载。每次下载需要 2-3 秒。我研究了多线程与多处理,似乎多线程对于 IO 来说会更好。
我有一个 python 的 url 列表,我使用这个函数来下载它们。
for k in range(0, 90000):
id_sep = urls[k].rpartition('/')
path = 'DownloadFolder/' + id_sep[2] + '.pdf'
if not os.path.exists(path):
urllib.request.urlretrieve(arxiv_PDF_IDs[k], path)
我想知道并行运行下载的最佳方法是什么。
另一个考虑因素是并发下载的最佳数量。这与核心数量有关吗?我的系统根据这个命令有两个
导入多处理
multiprocessing.cpu_count()
我有两个核心。这是否意味着同时下载的最佳数量是两次?如果是这样,我如何一次只进行两次下载,并将其余的迭代排队?
【问题讨论】:
-
所以对于 IO 绑定操作,您可能不太关心您有多少内核,您可以尝试分析并查看什么可以为您提供最饱和的带宽而不会出现错误...
-
几个快速的想法:可能想看看使用
requests包,它以更简单的格式支持这种事情。您可能还想查看this blogpost 使用请求和多线程下载。然后我建议对数据集进行分析,因为您的结果将取决于许多因素。
标签: python python-multiprocessing python-asyncio python-multithreading