У меня есть api, который должен получить информацию о месте проведения мероприятия из набора событий. Существует около 10000 событий, и весь процесс генерации списка занимает около 6,5 секунд, из-за чего загрузка сервера cpu достигает 100%, а загрузка страницы идет медленно. Я использую mongodb. Вот эта функция:Slow for loop in python
def get_venue():
events_all = Event.objects.all()
locality = ""
venue = []
data = ({'success':False, 'venue': venue})
for event in events_all:
venue_json = {'venue_name':"", 'local':"", 'locat_id':""}
try:
try:
venue_json['venue_name'] = event.location.location_name
except Exception as e:
venue_json['venue_name'] = ""
try:
venue_json['local'] = event.location.parent.location_name
except Exception as e:
venue_json['local'] = ""
venue_json['locat_id'] = event.location.location_id
venue.append(venue_json)
except Exception as e:
continue
if len(venue) > 0:
data['success'] = True
return json.dumps(data)
Если я удаляю петлю, страница загружается в секунду. Есть ли способ оптимизировать это и сократить время цикла до минимального?
Основной способ был бы ограничить количество событий вы разбор. Просто используйте срез типа 'для события в events_all [: 100]' только для первых 100 событий. Вы можете изменить номер или события в начале или конце списка. Кроме того, вы инициализируете все значения как пустые в начале цикла, но все равно они все равно устанавливаются после этого. Вы можете также инициализировать пустой словарь, чтобы сэкономить немного времени. – SuperBiasedMan
Мне нужно разобрать все события сразу, потому что все события содержат информацию о месте проведения. И я должен отображать все места в раскрывающемся списке в теге select. Единственная проблема заключается в том, что для прохождения всех событий требуется слишком много времени. Любые другие предложения? –
все элементы 'event' имеют атрибуты' location', а все элементы 'location' имеют' parent' в качестве атрибутов? – zehnpaard