Elimde icerisinde yaklasik 50 milyon civarinda satir bulunan bir txt dosyasi var verileri split edip istedigim sekilde satir satur okuyarak bunlari mysql tabloma ekliyorum ancak bu sekilde gercekten uzun suruyor daha once thread kullanarak bir program yazmamistim.Sanirim thread kullanarak bunu hizlandirmam mumkun o konuda sizden yardim istiyorum.Aslinda ugrassam yaparim gibji geliyor ama aklima takilan bir sorunu bir turlu cozmek icin bir fikir gelmedi aklima sorun suki veri tabaninan ekledigim bir satiri programin tekrar eklemesini istemiyorum yani zaten var olan bir satiri eklememesi lazim bunun icin veri tabaninda sorgulama yapabilirim sanirim eklemeden once ancak buda programin tekrar yavaslamasina sebep oluyor.Bana bu sorunu hiz kaybetmeden cozmek icin bir fikri olan varmi.
Aklima gelen ilk yontem txt dosyasini milyon satirilik 50 parcaya bolmek geldi ancak satir satir bolmem gerekiyor yabi hic bir satiri atlamadan bunu nasil yapabilirm bilen varsa buda isimi gorecektir sanirim.
threading modülü ile 50 tane thread oluşturup her thread’e 1 milyon satırı emanet edebilirsiniz. Böylece her thread eşzamanlı olarak kendi sorumluluğundaki satırları veritabanına ekler.
Aslında threading modülü ile sağladığınız eşzamanlılık gerçek bir eşzamanlılık değil; eğer bilgisayarınızda 4 işlemci çekirdeği varsa bunların 4’ünden de faydalanamazsınız. Çünkü Python’da GIL(Global Interpreter Lock) diye bir kavram var ve bu, Python programlarının birden fazla CPU’da eşzamanlı olarak çalışmasını engelliyor. Ancak subprocess modülü ile bunu sağlayabilirsiniz. threading modülünün aksine bu modül işletim sistemi seviyesinde çalışır ve işletim sistemi işlemleri(process) oluşturur. Bu işlemler birden fazla CPU’yu aynı anda kullanabildikleri için CPU çekirdeklerinden tam olarak faydalanabilmiş olursunuz.
o kısmı az çok anladım ancak 50milyon satır içinde mesela 2 milyonununcu satırı direk okumak için ne yapmam gerekecek orayı çözemedim.Bir enum nesnesi oluşturup o şekilde erişmeye çalışacağım
Konuya bir ek yapayim enumerate fonksiyonunubkullandigimda orjinal kodumun bariz sekilde hizlandigini gordum cok faydali oldu benim icin gercekten cok islevsel
Cok tesekkur ederim verileri tabloya aktardim ancak bu defa da sorgular cok yavasladi web uygulama eklersem bu halde pek islevsel olmaycaktir.Sorun cozdukce sorunla karsilasiyorum.tabloda 50 milyona yakin veri olmasindan kaynaklaniyor sanirim bunada bir cozum bulmamam gerekecek.
Yapılmayacak bir şey için yaptığımız bu tartışma uzayıp gidiyor. Büyük bir ihtimalle arkadaş işini mysql kullanarak yapmıştır. O yüzden uzatmanın lüzumu yok.