我正在尝试在 python 中并行化数千次下载。每次下载需要 2-3 秒。我看过多线程与多处理,似乎多线程对 IO 来说更好。
我有一个 url 的 python 列表,我使用这个函数来下载它们。
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()
我有两个核心。这是否意味着同时下载的最佳数量是两次?如果是这样,我如何一次只进行两次下载,并将其余的迭代排队?
下载不是一个受计算限制的过程;核心计数不太可能驱动您的并行性。相反,这将取决于您的网络带宽(或您的份额)。我们没有您的网络配置和物理特征,因此我们无法预测。
但是,为您找到解决方案的最快途径可能是运行一些简短的经验测试。每次运行将并行度扩展 3 倍或 4 倍;您可能会很快找到“最佳位置”。您可以尝试在 proc/thread 之间切换,但这不应成为限制因素——它应该是与该带宽平衡的网络响应。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句