Вопрос по python, http, concurrency, httprequest – Идеальный метод для отправки нескольких HTTP-запросов через Python? [Дубликат]
Возможное дублирование:
Несколько (асинхронных) соединений с urllib2 или другой библиотекой http?
Я работаю на веб-сервере Linux, который запускает код Python для получения данных в реальном времени по HTTP из стороннего API. Данные помещаются в базу данных MySQL. Мне нужно сделать много запросов ко многим URL-адресам, и мне нужно сделать это быстро (быстрее = лучше). В настоящее время я использую urllib3 в качестве библиотеки HTTP. Каков наилучший способ сделать это? Должен ли я создавать несколько потоков (если так, сколько?) И каждый запрос для другого URL? Я хотел бы услышать ваши мысли об этом - спасибо!
мног действительномног чем вы, вероятно, хотите использовать асинхронный, а не потоки.
GRequests позволяет использовать запросы с Gevent, чтобы легко выполнять асинхронные HTTP-запросы.
import grequests
urls = [
'http://www.heroku.com',
'http://tablib.org',
'http://httpbin.org',
'http://python-requests.org',
'http://kennethreitz.com'
]
rs = (grequests.get(u) for u in urls)
grequests.map(rs)
python_ver < 3.4
. У вас есть ссылка на пакет backports, о котором вы говорите? Это самый популярный пакет, который я вижу: Pypi.python.org / PyPI / backports.ssl_match_hostname
в. Например поиск-> подробности-> сохранить
Количество нитей, которые вы можете использовать, зависит не только от вашего оборудования. Сколько запросов может обслуживать сервис? Сколько одновременных запросов это позволяет выполнить? Даже ваша пропускная способность может стать узким местом.
Если вы говорите о некоторой проверке - служба может заблокировать вас после определенного количества запросов, поэтому вам нужно использовать прокси или несколько IP-привязок.
Что касается меня, то в большинстве случаев я могу выполнить на своем ноутбуке 50-300 одновременных запросов из сценариев Python.
Twisted. Вот некоторые веб-примеры, в том числе как скачать веб-страницу. Вот связанный вопрос на соединения с базой данных Twisted.
Обратите внимание, что Twisted делаетн полагаться на темы для выполнения нескольких вещей одновременно. Скорее, требуется кооперативная многозадачность подхода --- ваш главный скрипт запускает реактор, а реактор вызывает функции, которые вы настроили. Ваши функции должны вернуть управление реактору, прежде чем реактор сможет продолжить работу.