Я загружаю несколько RSS-каналов в хранилище данных в App Engine, чтобы обслуживать приложения для iPhone. Я использую cron для планирования обновления RSS каждые x минут. Каждая задача анализирует только один канал RSS (который содержит 15-20 элементов). Я часто получаю предупреждения о высокой загрузке ЦП на панели инструментов App Engine, поэтому я ищу способы оптимизировать мой код.
В настоящее время я использую минидом (поскольку он уже есть в App Engine), но подозреваю, что он не очень эффективен!
Вот код:
dom = minidom.parseString(urlfetch.fetch(url).content)
if dom:
items = []
for node in dom.getElementsByTagName('item'):
item = RssItem(
key_name = self.getText(node.getElementsByTagName('guid')[0].childNodes),
title = self.getText(node.getElementsByTagName('title')[0].childNodes),
description = self.getText(node.getElementsByTagName('description')[0].childNodes),
modified = datetime.now(),
link = self.getText(node.getElementsByTagName('link')[0].childNodes),
categories = [self.getText(category.childNodes) for category in node.getElementsByTagName('category')]
);
items.append(item);
db.put(items);
def getText(self, nodelist):
rc = ''
for node in nodelist:
if node.nodeType == node.TEXT_NODE:
rc = rc + node.data
return rc
1007
Что я могу сделать, чтобы сделать это быстрее? Что-то особенно плохое в приведенном выше коде, или я должен перейти на другой способ анализа? Есть ли какие-нибудь библиотеки (которые работают на App Engine), которые были бы лучше, или мне лучше самому разбирать RSS?