我正在尝试并行化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()
我有两个核心。这是否意味着同时拥有的最佳下载数量是两次?如果是这样,我如何一次只下载两次,并将其余的迭代排入队列?
答案 0 :(得分:2)
下载不是受计算限制的过程;核心数量不太可能驱动您的并行性。而是,这将取决于您的网络带宽(或其份额)。我们没有您的网络配置和物理特征,因此我们无法预测很多。
但是,为您找到解决方案的最快途径可能是运行一些简短的经验测试。每次运行将并行性扩展3倍或4倍;您可能会很快找到“最佳地点”。您可以尝试在proc /线程之间进行切换,但这不应该成为限制因素,它应该是与带宽相平衡的网络响应。