Вы пытаетесь оптимизировать то, что вообще не имеет значения.
Если вы хотите загрузить 200 URL-адресов как можно быстрее, вы потратите 99,99% своего времени на ожидание этих 200 запросов, что ограничено вашей сетью и/или сервером(-ами), с которого вы загружаете. Ключом к оптимизации является правильное количество одновременных запросов. Все, что вы можете сделать, чтобы сократить последние 0,01%, не окажет видимого влияния на вашу программу. (См. Закон Амдала.)
Разные источники дают разные рекомендации, но обычно это где-то между 6-12 запросами, не более 2-4 на один и тот же сервер. Поскольку вы извлекаете их все из Google, я бы предложил начать с 4 одновременных запросов, а затем, если это недостаточно быстро, настроить это число, пока не получите наилучшие результаты.
Что касается места, стоимость хранения 200 страниц будет намного превышать стоимость нескольких десятков байтов здесь и там для накладных расходов. Опять же, вы хотите оптимизировать эти 200 страниц — сохраняя их на диск, а не в память, анализируя их по мере поступления, вместо того, чтобы загружать все, а затем анализировать все и т. д.
В любом случае, вместо того, чтобы смотреть, какие инструменты командной строки у вас есть, и пытаться найти библиотеку, похожую на них, ищите библиотеки напрямую. pycurl
может быть полезен в некоторых случаях, например, когда вы пытаетесь сделать что-то сложное и уже знаете, как это сделать с помощью libcurl
, но в целом будет намного проще использовать либо модули stdlib, такие как urllib
, либо третьи Модули для вечеринок разработаны максимально простыми, например, requests
.
основной пример для ThreadPoolExecutor
в документации показывает, как делать именно то, что вы хотите сделать. (Если вы используете Python 2.x, вам потребуется pip install futures
, чтобы получить резервную копию для ThreadPoolExecutor
, и использовать urllib2
вместо urllib.request
, но в остальном код будет идентичным.)
person
abarnert
schedule
10.08.2014
pycurl
вместо stdlib,requests
или чего-то еще более Pythonic? Иногда для этого есть веские причины, но чаще всего я уже знаю, как это хорошо сделать вlibcurl
, и я ожидаю, что это переведется вpycurl
, что здесь, похоже, не так. - person abarnert   schedule 10.08.2014