ile karşılaştırıldığında püskürtme yapmak Bu bana tamamen şaşırtmış.Python OrderDict()
asset_hist = []
for key_host, val_hist_list in am_output.asset_history.items():
for index, hist_item in enumerate(val_hist_list):
#row = collections.OrderedDict([("computer_name", key_host), ("id", index), ("hist_item", hist_item)])
row = {"computer_name": key_host, "id": index, "hist_item": hist_item}
asset_hist.append(row)
Bu kod, yorumlanmış koleksiyon çizgileriyle mükemmel bir şekilde çalışır. Ancak, row = dict satırını yorumladığımda ve koleksiyon satırındaki yorumu kaldırdığımda işler çok garip olur. Asset_hist için bu satırların yaklaşık 4 milyonu üretilir ve eklenir.
Yani, row = dict komutunu kullandığımda, tüm döngü yaklaşık 10 milisaniyede bitiyor, hızlı yıldırım. Sipariş edilen sözlüğü kullandığımda 10 dakikadan fazla bekledim ve hala bitmedi. Şimdi, OrderDict'ın bir diksiyondan biraz daha yavaş olması gerektiğini biliyorum, ama en azından 10x daha yavaş olması gerekiyordu ve matematik tarafından bu fonksiyonda 100,000 kat daha yavaş.
Neler olduğunu görmek için endeksi en düşük döngüde yazdırmaya karar verdim. İlginç bir şekilde, konsol çıkışında bir sıçramayı fark ettim. İndeks ekranda çok hızlı yazdırılır ve devam etmeden önce yaklaşık 3-5 saniye boyunca durur.
am_output.asset_history bir anahtar, ana bilgisayar ve her satır dizelerin bir listesi olan bir sözlüktür. Örneğin.
am_output.asset_history = {"host1": ["string1", "string2", ...], "host2": ["string1", "string2", ...], ...}
DÜZENLEME: OrderedDict bu VM Server
Toplam Bellek ile Sputter Analizi: Sadece 8GB ... daha provissioned almak gerekir.
DÖNGÜ NUM
184796 (~ 5 saniye bekleyin, ~% 60 bellek kullanımı)
634481 (~ 5 saniye bekleyin, ~% 65 bellek kullanımı)
1197564 (~ 5 saniye bekleme , ~% 70 bellek kullanımı)
1899247 (~ 5 saniye bekleyin, ~% 75 bellek kullanımı)
2777296 (~ 5 saniye bekleyin, ~% 80 bellek kullanımı)
012.351.3873730 (UZUN WAIT ... 20 dakika bekledi ve !,% 88,3 bellek kullanımı, süreç hala çalışıyorsa vazgeçti) bekleme her çalışmaya değişiklikleri olur
.
EDIT: Tekrar çalıştırın, bu sefer daha önce durduğu noktaya yakın 3873333'te durun. Satır oluşturduktan sonra durdu, eklemeye çalışırken ... Bu son denemeyi fark etmedim ama o zamanlar da vardı ... sorun, satır çizgisi değil, ek satır ile ... ben hala şaşkın. , OrderedDict ([('bilgisayar_adı', 'bg-fd5612ea'):
3873333: İşte bu doğru uzun durağı önce üretilen satır (baskı açıklamaya satır eklendi) var ... hostname masum korumak için değiştirilmiştir ('id', 1), ('hist_item', 'sys1 Normalizatör (sys1-4): Etki Alanı Adı, sys1 Adından' gg-fd5612ea '.')])
Gözlemlediğiniz şeyin, 'Dict' ve 'OrderedDict' davranışlarından kaynaklandığına inanmak zor, başka bir şeyin değişmesi mümkün mü? Ayrıca birisinin bu –
'u yeniden üretmek için mücadele edeceğini düşünüyorum, öncelikle büyük sözlüğü üretmeleri gerekecek, muhtemelen rasgele dize üreticileri yeterli olacaktır. Ama ben tamamen ciddiyim, # aşağı doğru hareket ettiğimde bu olur. Aynı zamanda dikkat çekicidir: sıralı bir dict kullanıldığında bu döngüde sıkışıp kaldığında ve kontrolü durdurmak için C + tuşuna bastığımda, hiçbir şey olmuyor ... Kontrol için + Z'ye basmalıyım. – gunslingor
Hangi Python sürümü? En yeni olarak, OrderedDict basit bir şekilde, uygulama detayı ile sipariş verileceği için, dict için bir takma addır. – RemcoGerlich