2011-02-09 2 views
3

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

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

Любые идеи?

+0

Что произойдет, если вы отрегулируете свои ограничения ресурсов через http://docs.python.org/library/resource.html? –

+0

просто для уточнения задачи: вы хотите открыть ~ 10K потоков? я бы работал с 10 вершинами, каждый из которых делал несколько запросов, обрабатывал выход, а затем регистрировал его как-то. –

ответ

1

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

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

+0

Это действительно красивое решение, но оно прошло мимо моих потребностей. Но теперь я вижу, что конечность возможных соединений, вероятно, является более ограничивающим фактором, чем максимальное количество потоков. Благодаря! –

0

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

0

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

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