Поточная производительность Python - PullRequest
2 голосов
/ 15 февраля 2011

У меня есть веб-приложение, которое нуждается в проверке функциональности и производительности, а часть набора тестов, который мы планируем использовать, уже написана на Python.Когда я впервые написал это, я использовал Mechanize в качестве средства очистки веб-страниц, но он кажется слишком громоздким для того, что я пытаюсь сделать (либо это, либо я что-то упускаю).

Основная схема того, что я пытаюсь сделать, заключается в следующем.Все объекты.

  • У пользователя есть Comm (раньше был интерфейсом между моими вещами и механизацией)
  • У Comm есть браузер (содержит объекты CookieJar, urllib2 и BeautifulSoup, используемые длябыть механизированным)
  • Браузер имеет Форму (ы) (раньше обрабатывался механизированно)

Теперь, что касается многопоточности, у меня есть это вниз.Корректировка между работой с GIL и наличием отдельных экземпляров Python будет выполнена по мере необходимости, но предложения будут приняты.

Итак, мне нужно, чтобы пользователи потоков запускали приложение и выполняли различные действия (вход в систему).заполнять формы, отправлять формы для обработки и т. д.), не заставляя испытательный ящик кричать слишком громко.Моя текущая проблема с механизацией, похоже, связана с оперативной памятью.

Часть того, что вызывает проблему с ОЗУ, заключается в том, что каждый пользователь должен не использовать отдельные экземпляры браузера, чтобы не перезаписывать файл cookie JSESSIONID каждый раз, когда я что-то делаю с другимuser.

Многое из этого может показаться тривиальным, но я пытаюсь запустить здесь тысячи потоков, поэтому небольшие изменения могут много значить.Любой вклад приветствуется.

Ответы [ 3 ]

1 голос
/ 03 апреля 2011

Многопоточность вызывает проблемы с GIL, особенно с большим количеством ядер.Попробуйте использовать механизацию с eventlet для достижения параллелизма (через несколько процессов), также проверьте multi-mechanize

0 голосов
/ 28 марта 2011

Я на самом деле пошел без механизации и использовал модуль Threading.Это учитывало довольно быстрые транзакции, и я также следил за тем, чтобы не было слишком много внутри каждого потока.Информация для входа в систему и приведение веб-приложения в необходимое состояние до того, как я врезался, помогли потокам работать короче и, следовательно, быстрее.

0 голосов
/ 08 марта 2011

Рассматривали ли вы Twisted, асинхронную библиотеку, по крайней мере для взаимодействия с пользователями?

...