Я пытаюсь реализовать базовую библиотеку для выдачи HTTP GET запросов.Моя цель - получать данные через сокетные соединения - минималистичный дизайн для улучшения производительности - использование с потоками, пулами потоков .
У меня есть несколько ссылок, которые я группирую по их именам хостов, поэтому вот простая демонстрация входных URL:
hostname1.com - 500 links
hostname2.org - 350 links
hostname3.co.uk - 100 links
...
Я намерен использовать сокеты из-за проблем с производительностью.Я намерен использовать несколько сокетов, которые поддерживают связь (если это возможно и обычно так и есть) и отправлять HTTP-запросы GET.Идея возникла из-за низкой производительности urllib при непрерывных запросах, потом я встретился с urllib3, потом понял, что он использует httplib, а затем решил попробовать сокеты.Итак, вот что я выполнил до сих пор:
класс GETSocket, класс SocketPool, классы ThreadPool и Worker
класс GETSocket - минимизированная версия "только для HTTP GET" Python.httplib.
Итак, я использую эти классы следующим образом:
sp = Comm.SocketPool(host,size=self.poolsize, timeout=5)
for link in linklist:
pool.add_task(self.__get_url_by_sp, self.count, sp, link, results)
self.count += 1
pool.wait_completion()
pass
__get_url_by_sp
- это обертка, которая вызывает sp.urlopen
и сохраняет результат в списке results
.Я использую пул из 5 потоков, который имеет пул сокетов из 5 классов GETSocket.
Что мне интересно, есть ли другой возможный способ улучшить производительность этой системы?
Я читал об асинхронном здесь , но я не мог понять, как использовать такое же сокетное соединение с предоставленным class HTTPClient(asyncore.dispatcher)
.
Еще один момент, я не знаю, могу ли яm используя блокирующий или неблокирующий сокет, который был бы лучше для производительности или как реализовать какой.
Пожалуйста, определитесь с вашим опытом, Я не собираюсь импортировать другую библиотеку сделать только HTTP GET, поэтому я хочу написать свою собственную крошечную библиотеку.
Любая помощь приветствуется, спасибо.