Распараллеливая загрузки в Python, какое оптимальное количество одновременных загрузок и какой метод использовать? - PullRequest
0 голосов
/ 13 июня 2019

Я пытаюсь распараллелить тысячи загрузок в python. Каждая загрузка занимает 2-3 секунды. Я смотрел на многопоточность против многопоточности, и кажется, что многопоточность была бы лучше для ввода-вывода в соответствии с.

У меня есть список ссылок на 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 ()

У меня два ядра. Означает ли это, что оптимальное количество одновременных загрузок равно двум? Если да, то как мне делать только две загрузки одновременно и ставить в очередь остальные итерации?

1 Ответ

2 голосов
/ 14 июня 2019

Загрузки не связаны с вычислениями;количество ядер вряд ли приведет к вашему параллелизму.Скорее, это будет зависеть от пропускной способности вашей сети (или вашей доли).У нас нет конфигурации вашей сети и ее физических характеристик, поэтому мы не можем предсказать многое.

Однако самый быстрый путь к решению для вас, вероятно, - проведение коротких эмпирических тестов.Масштабируйте ваш параллелизм в 3 или 4 раза при каждом запуске;скорее всего, вы быстро найдете «сладкое пятно».Вы можете попробовать переключиться между proc / thread, но это не должно быть ограничивающим фактором - это должен быть сетевой ответ, сбалансированный с этой пропускной способностью.

...