2015-06-22 7 views
1

Мне нужно отправить много запросов на отправку по почте (несколько тысяч) и прочитать ответы параллельно. Я использую httplib в python, мне требуется в среднем 0,5 мс для отправки запроса, и довольно медленно читать ответ. Я использую сопрограммы (gevent) вместо потоков, чтобы сделать это быстрее. Я думал о следующем, чтобы сделать это быстрее:Быстрые HTTP-запросы в Python

  • записи C код (я должен был бы найти хорошую библиотеку HTTP в C), и писать с-расширением
  • использование Cython

Какой подход обеспечит быстрый код? Любое совместное использование опыта с одним или другим подходом было бы также высоко оценено. Любая другая идея очень приветствуется.

+0

Вы измеряли, где проводится большая часть времени? Если значительное время тратится на создание сетевого подключения к серверу, я не думаю, что вы получите намного быстрее с помощью программы на C. Также 0,5 мс тихо, или вы имели в виду 0,5 с? – Bernhard

+0

Нет, это просто отправка сообщения, за исключением создания соединения, и исключение времени для подключения (трехстороннее квитирование). Большую часть времени, затраченную на отправку данных (connection.send, где соединение является httplib.HTTPConnection) – DevShark

+0

И что является узким местом для передачи данных? Моя (необразованная) догадка заключается в том, что медленная вещь - это задержка в работе сети или ОС, и она не будет намного быстрее с оптимизацией кода на стороне клиента. – dhke

ответ

1

Я бы предложил посмотреть PyCURL. Прежде чем вы это сделаете, вы должны проверить, есть ли у вас более высокая пропускная способность, когда вы используете завиток из командной строки. Если это не так, вы, вероятно, не получите лучших результатов с PyCURL.

+0

Спасибо, я даю ему выстрел прямо сейчас. – DevShark

+0

У меня был хороший взгляд на него, но, к сожалению, он мало улучшается и не дает доступа к основным объектам сокета, поэтому я теряю контроль. Спасибо, в любом случае, было полезно посмотреть. – DevShark

Смежные вопросы