Python Foreach Speed Up

Herkese selam,

Hemen konuya giriyorum. MongoDB’ye, MongoEngine aracılığı ile 7 farklı şart içeren bir query atıyorum ve Queryden dönen data, list biçiminde dönüyor. Bu listi foreach ile dönüyorum fakat bu foreach oldukça yavaş çalışıyor. Yüz binlerce data olduğunu varsayarsak beni çok yavaşlatıyor. Yardımlarnızı bekliyorum.

Kod:

mongo_data=mongo_models.ParsedDataTest.objects.filter(Q(dimensions__0=dimension)&Q(dimensions__1=metric)&Q(dimensions__2=segment)&Q(dimensions__3=custom_dimension)&Q(dimensions__4=custom_dimension_)&Q(reportRequestId=report_request_id_)&Q(partnerId=partner_id_)).order_by('-id').limit(60)

for data in mong_data:   # <------------ bu foreach
     print(data.value)
1 Beğeni

Listeyi parçalara ayırın ve threading modülünü kullanın.

Verilerinizin ne içerdiğini bilmiyorum, buna göre iki tane öneride bulunabilirim. Birincisi gelen verileriniz sıralı ve bir sayı listesi ise, arama yapmak için “binary search” algoritmasını kullanabilirsiniz. Örneğin 100.000 tane sayıda arama yaparsanız

log2(100.000) = 16,6096404744368

adımda bitecektir. Peki nerden geliyor? Bu algoritmanın çalışma mantığından.

http://bilgisayarkavramlari.sadievrenseker.com/2009/12/21/ikili-arama-algoritmasi-binary-search-algorithm/

Diğer durumda, aşağıdaki linkte bulunan konuyu inceleyebilirsiniz

1 Beğeni

Bu matematikteki logaritma yazılımda ne için kullanılıyor?

1 Beğeni

Bu muhtemelen işe yaramaz. Çünkü Python’da GIL (Global Interpreter Lock) var. Bu sistem sebebiyle threading ile farklı işlemcileri kullanmak mümkün değil. Ancak subprocess ile işletim sistemi seviyesinde thread’ler kullanılarak bu başarılabilir.

Algoritma analizi için kullanılır. Daha doğrusu algoritma analizini ifade etmek için.

Şöyle bir tabloya bakarak bir fikir edinebilirsiniz

Bu konu algoritma analizi olarak geçiyor. Aşağıdaki linklerde yer alan sayfaları okuyabilirsiniz.

http://bilgisayarkavramlari.sadievrenseker.com/2010/09/24/algoritma-analizi-analysis-of-algorithms/


http://bilgisayarkavramlari.sadievrenseker.com/2010/06/17/karmasiklik-siniflari-complexity-classes/

2 Beğeni

Yardımlarınız için teşekkürler. Şimdi MongoEngine querysinden gelen data MongoObject tipinde.
Tüm objeleri bir liste atıyorum ve bu listi foreach ile açınca sorun olmuyor çok hızlı bir şekilde sonuç alıyorum.
Fakat objelerin içine erişmek istediğimde yani tüm objeleri tutan listin içinede bir foreach açınca oldukça yavaşlıyor.

Bu konuda size ancak link vererek yardımcı olabilirim. for döngüsü içerisinde yaptığınız işlemler de hıza etki ediyor. Kodunuzu tekrar inceleyip, gerekirse yavaşlattığını düşündüğünüz kısımları yeniden düzenlemeli ve varsa bunların alternatiflerini aramalısınız. Aşağıya birkaç link bırakacağım. Umarım işinizi görür.

https://bytes.com/topic/python/answers/543980-best-way-handle-large-lists


https://docs.python.org/3/library/pickle.html

https://docs.python.org/3.5/library/bisect.html