Создание огромного количества HTTP-запросов в Python - PullRequest
3 голосов
/ 09 февраля 2011

Я пытаюсь протестировать веб-приложение, часть из которых заключается в том, чтобы сделать ~ 10K запросов, взять несколько <1K, возвращающих <code>200 OK, и просмотреть их данные. В веб-приложении есть ошибки, и есть ложные срабатывания, поэтому каждые 200 ОК должны быть проверены как минимум трижды.

Работая в Python, я пытался сделать это с многопоточностью и urllib, но в Linux я получаю ошибки потоков после ~ 920 потоков. (Моя теория состоит в том, что это /proc/sys/kernel/threads-max, разделенное на тридцать, что очень жутко точно, но это возмущает, что каждый поток регистрируется как 30 потоков с ОС). В любом случае, я ищу хорошее решение для этой задачи. Я посмотрел Twisted, но похоже, что я все еще буду связан с потоками.

Есть идеи?

Ответы [ 4 ]

1 голос
/ 09 февраля 2011

Я тестировал с apache ab веб-сервер TORNADO и не смог выполнить более 1000 соединений в секунду на моем двухъядерном Athlon @ 2Ghz. 30% ресурсов заняли средства тестирования ab, а оставшиеся были предназначены для сервера. Я совершенно уверен, что большая часть ресурсов расходуется на уровне ОС и IP-этики.

http://amix.dk/blog/post/19581
Неблокирующие серверы имеют лучшую производительность, чем блокирующие серверы, поскольку они не создают протектор для каждого соединения. Теоретически они могут работать в одном протекторе.

0 голосов
/ 09 февраля 2011

Я использовал для этого привязки Python для libcurl ( pycurl ) в прошлом. Используйте функцию нескольких клиентов, которая делает это асинхронно в C. Это довольно быстро.

0 голосов
/ 09 февраля 2011

У меня хороший успех с FunkLoad для создания сценариев массовых транзакций с веб-сайтами.

0 голосов
/ 09 февраля 2011

Можно попробовать использовать асинхронные HTTP-запросы (пример кода приведен внизу статьи).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...