我有一個api,它應該讓我從一系列事件中獲得場地細節。有大約10000個事件,生成列表的整個過程花費大約6.5秒,因爲服務器cpu使用率高達100%,頁面加載速度緩慢。我正在使用mongodb。這裏是功能: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)
如果我刪除循環,然後加載頁面下一秒。有沒有什麼辦法可以優化這一點,並縮短循環時間?
的主要途徑將是限制你解析事件的數量。只需使用像'for event_all [:100]'中的事件一樣的片段來僅發送前100個事件。你可以改變這個數字,或者它是否是列表開始或結束的事件。除此之外,您在循環開始時將所有值初始化爲空,但無論如何它們都會被設置爲空。你也可以初始化一個空字典來節省一些時間。 – SuperBiasedMan
我必須一次解析所有的事件,因爲所有的事件都有一個場地的細節。我必須在選擇標籤中顯示所有場所作爲下拉菜單。唯一的問題是,花費太多時間來研究所有事件。還有其他建議嗎? –
所有'event'項目都有'location'作爲屬性,並且所有'location'項目都有'parent'作爲屬性嗎? – zehnpaard