On Thu, 28 Apr 2011 16:48:54 +0000, Gökçen Eraslan <gok...@pardus.org.tr> wrote:
Selamlar,

Selamlar,

Uzun zamandır aklımda olan bir şey pisi'nin index kodunu biraz hızlandırmak. Farmı her dürttüğümde hem ikili deponun hem debug deposunun index'lenmesini
beklemek çok uzun sürüyor.

Index hızlandırma işi ne zamandır aklımdan çıkmış olsa da, geçenlerde aklıma gelen "Biz neden hala farmı elle çalıştırıyoruz, her paket commit edildiğinde otomatik derlemeye başlasa ya!?!" düşüncesini sesli dile getirdiğimde, Onur
bunun için index'in de hızlandırılması gerektiğini söylediğinde tekrar
alevlendi. Zira derlenmesi üçer saniye süren üç paketi arka arkaya commit
ettiğimizde indexlerle birlikte totalde dakikalarca indexleme yapılmasını
beklemek akıl kârı değil.

Ozan'la birlikte geçenlerde yaptığımız girişimler sonucunda ekteki yama çıktı
ortaya. Özetle normalde index.py'deki Index sınıfının index methodunda for
döngüsü içinde her paket için tek tek yapılan pspec.xml/metadata.xml parse
etme, sha1sum hesaplama işlemini Python'un harika multiprocessing modülünü
kullanarak bir süreç havuzunda yaptırttık ve 2011 devel farmında indeksleme işlemi 1dk 56sn'den, 49sn'ye indi. Bu arada bugün bir değişiklik daha yapıp, kaynak paketlerin indekslenmesi için de aynı paralelleşmeyi sağladım. Kaynak
depolar için de test edebilirsiniz.

Elinize sağlık. Arada print'li satırlar kalmış. Bunları ctx.ui kullanacak
hale getirmelisiniz eğer gerekliyse. Bir de bazı satırlar (özellikle yorum
satırları) 79 sütun sınırını geçmiş. Bunları da kırpalım.

Ortaya çıkan beğenmediğim birkaç husus var:

1- index.py nesne temelli tasarımdan biraz uzaklaşmış oldu. Bunun nedeni
multiprocessing methodlarının sınıf methodları üzerinde çalışmıyor oluşu.
Sınıf methodları değil muhakkak normal fonksiyonlar vermek gerekiyor
multiprocessing modülüne paralelleştirme için.

Sorun değil. Pisi'deki her modül nesne temelli tasarlanmamış zaten.

2- Pool.map fonksiyonu sadece tek parametre alan fonksiyonlarda çalıştığı
için, add_* fonksiyonlarının parametre sayısını bire indirmek zorunda kaldık.

Bunun daha şık bir yolu vardır belki. Şimdilik böyle olsun.

3- Klavye kesmelerini yakalamak için küçük bir hack yapmak gerekiyor, detaylar
yamanın içinde yazıyor yorum olarak.  Bununla ilgili python'da 3 tane açık
hata var, yamada yazdım neler olduğunu. Bakıp yorumlayabilirsiniz.

4- Nadiren, Control+C'ye iki kez basmak gerekebiliyor indeks işlemini iptal
etmek için. Üstteki durumdan kaynaklanıyor bu da.

Yamaya bir göz atın, deneyin, test edin, performansını ölçün.

Ben bu üsttekilerin engelleyici sorunlar olduğunu düşünmüyorum yamayı içeri
almak için ame yine de burada tartışalım.

+1. Benden OK.

Not: İndeks çıktısında daha önce indekslenen tüm paketler yeni satırla
bölünerek destan gibi ekrana basılıyordu. Yamada bunu da değiştirdim,
"\r%-80.80s" şeklinde tek satırda yazdırıyorum artık tüm paket isimlerini.

Güzel olmuş. Ben de index'in gereksiz yere uzun bir çıktı verdiğini
düşünüyordum.

_______________________________________________
Gelistirici mailing list
Gelistirici@pardus.org.tr
http://liste.pardus.org.tr/mailman/listinfo/gelistirici

Reply via email to