У меня есть приложение Django, которое использует django-поршень для отправки XML-каналов внутренним клиентам.Как правило, они работают довольно хорошо, но у нас есть несколько XML-каналов, которые в настоящее время работают более 15 минут.Это приводит к превышению времени ожидания, и каналы становятся ненадежными.
Я пытаюсь обдумать, как можно улучшить эту настройку.Если это требует некоторой реструктуризации данных, это тоже возможно.
Вот как выглядит сбор данных в настоящее время:
class Data(models.Model)
# fields
class MetadataItem(models.Model)
data = models.ForeignKey(Data)
# handlers.py
data = Data.objects.filter(**kwargs)
for d in data:
for metaitem in d.metadataitem_set.all():
# There is usually anywhere between 55 - 95 entries in this loop
label = metaitem.get_label() # does some formatting here
data_metadata[label] = metaitem.body
Очевидно, ядро программы делаетгораздо больше, но я просто указываю, где проблема.Когда у нас есть data
список из 300, он просто становится ненадежным и время ожидания истекает.
То, что я пробовал:
- Получение коллекции всех идентификаторов данных, затем выполнениеодин большой запрос, чтобы получить все
MetadataItem
.Наконец, отфильтровываю те, что в моем цикле.Это должно было сохранить некоторые запросы, которые он уменьшил. - Использование
.values()
для сокращения издержек экземпляра модели, что ускорило его, но не намного.
Oneidea Я думаю, что одним из простых решений этого является пошаговая запись в кэш.Чтобы сократить время ожидания;Я бы написал первые 50 наборов данных, сохранил в кэш, настроил какой-нибудь счетчик, записал следующие 50 и т. Д. Все еще нужно обдумать это.