Ana içeriğe atla

Python Multithreading ile Büyük Verileri Okuma/Arama



Büyük Verileri Okuma Arama Yapma


Python ile büyük dosyaları verileri hızlı okuma, arama yapmayı nasıl yaparız? Bunun için yapılmış güzel programlar var lakin çoğu ya 30 gün deneme sürümü ya da ücretli. Ücretsiz olanları ise fazla zorladığınız zaman donabiliyor. Gelelim python ile büyük dosyaları işlemeye (big data read multithreading) 



Python ile işlerimizi hızlandırmak için threading kütüphanesini kullanacağız. Daha fazla bilgi için Python threading modülü sayfasına bakabilirsiniz.
Dosyayı belirtilen parçalara bölerek başlangıç ve bitiş noktalarını bir diziye aktarıyoruz daha sonra threading kütüphanesi ile oku fonksiyonuna gönderip uygun regex eşleşmesi olduğunda programı durduruyoruz. İstersek maximum işlem sayısını fazla yapabiliriz sistem izin verdiği miktarda. Daha fazla yaptığınızda memory error (bellek hatası ) alabilirsiniz.

Python Multithreading ile Büyük Dosyaları Okuma/Arama kodu



#python ile büyük dosyaları satır satır okuma işleme arama yapma
import os,time,re,sys,random,threading

#regex desenimiz
regex = r"[0-9]+"

dosyaYolu='data.txt'            
def oku(boyut):
    bas=boyut.split('/')[0]
    son=boyut.split('/')[1]
    f=open(dosyaYolu)
    f.seek(int(bas))
    lines=f.read(int(son)).splitlines()
    f.close()
    a=re.findall(regex,lines[0])
    if(str(a)!="[]"):
        print a
        raw_input('bulundu ...')
        

def isInt(x):
    if x%1 == 0:
        return False#tam bölünüyor
    else:
        return True


"""
Dosyayı belirtilen parcalara gore bir diziye aktarıyoruz.
Daha basitte yapılabilir.
ornek vermek gerekirse
0/100
101/200
201/300
"""
def boyutListHazirla(boyut,parca):
    bol=float(boyut)/float(parca)
    sayilar=[]
    print "toplam parca"+str(bol)
    print "toplam mb: "+str(boyut/1024*1024)
    for i in range(0,int(bol)):
        if i==0:
            j=i
        b=parca
        t=b*(i+1)
        s=str(j)+"/"+str(t)
        #print s
        sayilar.append(s)
        j=t+1
    if(isInt(bol)):
        isi=str(t+1)+"/"+str(boyut)
        #print isi
        sayilar.append(isi)

    return sayilar




boyut = os.path.getsize(dosyaYolu)
boyutlist=boyutListHazirla(boyut,50*1024*1024)#50 mb lik parcalar.

print len(boyutlist)

#ayni anda en fazla 5 islem yapiyor.
maxthreads = 5
for i in range(0,len(boyutlist)):
    while threading.activeCount() >= maxthreads:
        time.sleep(0.2)
        sys.stdout.write(str(i)+ " Bekliyor.\r")
        sys.stdout.flush()
    sys.stdout.write(str(i)+ " Araniyor.\r")
    sys.stdout.flush()
    threading.Thread(target = oku, args=(boyutlist[i])).start()

Yorumlar

Bu blogdaki popüler yayınlar

WhatsApp Şaka Virüsü

Whatsapp Şaka virüsü ile internetten anlamayan arkadaşlarınıza link atarak eğlenebilirsiniz. Sosyal mühendisliğiniz ne kadar iyiyse inandırıcılıkta artar. Hem android hem ios kullanıcılarında çalışır. Baştan söyleyelim bu virüs değildir. Yine siz bilirsiniz. Bu aralar hacklenmedik sistem kalmadı :D CiftKlik.Net olarak sorumluluk kabul etmiyoruz. Whatsapp api'ları ile ekrana istediğimiz yazıyı yazarak sosyal mühendislik yapıyoruz.

Bütün yazılım dillerinde "Merhaba Dünya" kodları

1)  ASSEMBLY // Ekrana “Merhaba!” yazan örnek program kodu: mov ax,cs mov ds,ax mov ah,9 mov dx, offset Git int 21h xor ax,ax int 21h Git: db "Merhaba!",13,10,"$" 2)  ALGOL (ALGOrithmic Language) // ALGOL 68'e ait, örnek “Merhaba!” kodu: begin print(( "Merhaba!" , newline)) end

İnönü Üniversitesi Bilgisayar Mühendisliği

Mezun oldum İnönü Üniversitesi Bilgisayar Mühendisliğinden yeni mezun olmuş birisi olarak Mühendislik Fakültesi hakkında soru cevap olarak bölüm hakkında bilgi vermiş olacağım. Bilgisayarın bitinden, mimarisine, algoritmasından her şeyine bir fikir sahibi, bu fikirle kodlama yapabilecek seviyeye geldim. Gurbeti yaşadım. Evsiz barksız kalmanın yaşattığı hüznü anladım. Bir selamcık dost kavramını öğrendim. Farklı şehirlerden, farklı kültürden, farklı dilleri konuşan arkadaşlarım oldu.  Dost dediklerimden daha hatır bilen kişilere abilik yaptım, yol gösterecek abiler edindim. Yazılım dünyasından pek çevre yapamasam da güzel insanlar karşıma çıktı. Sınav saatine kadar dışarıda kaldığım zor günler yaşadım. Herkesin kaldığı sınavdan gözü kapalı geçtiğim ;) soru/cevap olmasına rağmen kaldığım sınavlar da oldu. Büyük şirketlerin açıklarını buldum, hala kapatılmadı.