Альтернативы моему медленному методу использования BeautifulSoup и Python для синтаксического анализа Amazon API XML?

Как сказано в заголовке, я использую модуль BS в Python для анализа страниц XML, к которым я обращаюсь из API Amazon (я создаю подписанный URL-адрес, загружаю его с помощью liburl2, а затем анализирую с помощью BS).

На создание двух страниц уходит около 4 секунд, но должен быть более быстрый способ.

Будет ли PHP быстрее? Что делает его медленным, синтаксический анализ BS или загрузка liburl?


person Mike J    schedule 06.07.2010    source источник
comment
почему бы тебе не рассказать нам, что замедляет работу? Готов поспорить на доллар, это не суп. В стандартной библиотеке есть несколько модулей обработки XML, я не вижу зачем тебе здесь BS.   -  person SilentGhost    schedule 06.07.2010
comment
Я не знаю, почему это тормозит, поэтому и спрашиваю. Это либурл?   -  person Mike J    schedule 06.07.2010
comment
Итак, профилируйте это! Мы здесь не ясновидящие.   -  person SilentGhost    schedule 06.07.2010
comment
Извини, Призрак, я не знал о cProfile, пока Джейсон не предложил его.   -  person Mike J    schedule 06.07.2010


Ответы (1)


Если вы хотите узнать, что делает его медленным, воспользуйтесь одним из профилировщиков. Я подозреваю, что доступ к сети (и поиск их базовой базы данных) медленнее, чем остальные.

person Jason R. Coombs    schedule 06.07.2010
comment
Спасибо, Джейсон, это очень удобно! Я предполагаю, что Total Time - это то, что я ищу, и я заметил это: 1488 13,265 0,009 13,265 0,009 {method 'recv' of '_socket.socket' objects} На 13,265 секундах я готов поспорить, что это виноват. Могу я спросить, что это значит? - person Mike J; 06.07.2010
comment
@Mike, recv = получать. Обычно это блокирующий вызов сокета. Это означает, что он просто ждет ответа от Amazon или поступления всех данных (зависит от того, сколько данных и какая пропускная способность доступны). - person wds; 06.07.2010
comment
@wds спасибо! Полагаю, у меня нет выбора относительно скорости? - person Mike J; 06.07.2010
comment
@Mike: не совсем, кеш агрессивно - person wds; 06.07.2010
comment
@Mike Вы можете получать несколько страниц параллельно. - person Mad Scientist; 06.07.2010
comment
@wds и @ Fabina, спасибо! Не могли бы вы найти хорошее место, чтобы помочь мне начать изучение кеширования и параллельной выборки? - person Mike J; 06.07.2010
comment
@Mike caching - ›зависит от того, сколько файлов и сколько раз они вам понадобятся. Если это не слишком много, подумайте о том, чтобы просто держать их в словаре. Для более надежного решения вы можете рассмотреть memcached. Что касается параллельной выборки, я бы, вероятно, выбрал многопроцессорную обработку для обработки различных сборщиков и их ввода-вывода docs.python.org/library/multiprocessing.html - person wds; 08.07.2010