Threading içeren bir kodun çalışmasının/çalışma hızının donanımla ilişkisi

Merhaba arkadaşlar,

Bir program hazırladım. Bin adet thread başlatıyorum daha sonrasında bu bin adeti bitirmesini uyguluyorum ardından bir sonraki bin adete geçiş yapıyor. Requests ile sorgu yaptırıyorum. Ancak şöyle bir sorun yaşıyorum. Belli bir süre sonra bu program duruyor. Sebepsizce takılıyor bir thread işleminde.
Çok fazla denemeler yaptım en sonunda kullandığım sunucu firmasını değiştirdim. Orada bu sorunu yaşamıyorum.
Ancak şöyle bir durum var.
Eski sunucum 32 gb ram 8 çekirdekli ve internet hızı gayet iyi olan bir sunucu.
Yeni sunucum ise 4 gb ram 3 çekirdek onunda internet hızı iyi ama eskisinde daha yüksek hızı vardı.
Yani anlayacağınız yeni sunucum eskisine göre daha düşük kapasiteye sahip. Haliyle yeni sunucumda threadlar bir tık yavaş ama bir yerde durmuyor. Ben şimdi bu firmadan özelliklerini yükseltirsem daha iyi verim alacağım.

Konuyu çok uzattım biliyorum kusura bakmayın. Asıl sorum şu

Sebebi nedir? İşlemci modelinin farklı olması bu thread konusunda bir farklılık yaratıyor mu?

Teşekkürler şimdiden yorumlarınız için

1 Beğeni

Merhaba.

Sebepsizce takılmaz.

Kodunuzu paylaşmazsanız pek yorum yapamayız.

Programın durup durmaması üzerinde bir etkisi olmamalı, hayır.


1000 thread çok yüksek bir miktar. Python’da multithreading OS thread’ları tarafından birebir desteklendiği için işletim sistemine fazla yük biniyor olabilir. Ayrıca GIL, Python kodunuzun birden fazla thread kullanarak gerçek anlamda bir performans kazancı sağlamasını engeller. Siz concurrent I/O yapmaya çalışıyorsunuz, sizi sınırlayan etken işlemci gücü değil. Ben multithreading kullanmak yerine asenkron sorgu yapan bir kütüphane kullanmanızı tavsiye ederim.

Ayrıca bu konu da ilginizi çekebilir:

2 Beğeni

Bu dogru bir kullanim degil sanki, isler neden birbirini bekliyor?
Job queue veya work queue dedigimiz yapiyi incelemek isteyebilirsin.

Internet uzerinden yaptiriyorsan eszamanli 1000 sorgu cok sanki. Daha kucuk sayilari denemeni tavsiye ediyorum.

Yukarida yazdiklarim bu iki problemi de adresliyor.

Bu kaynaklarin ne kadarinin kullanildigini bilmeden bir sey soylemek zor.

Thread’lerin calisma hizlarinin sunucular arasinda degismesi icin bir sebep goremiyorum. (Ag kullandiklari zamani saymiyoruz tabi ki)

2 Beğeni

Öncelikle yorumlarınız için teşekkürler.

Kısaca kodumu özetleyeyim.

import threading
def fonksiyon():
    pass

data = []
liste = []


a = 0
for i in liste:
    a += 1
    data.append(threading.Thread(target=fonksiyon, args=(a,i)))
    if a == 1000:
        for th in data:
            th.start()
        
        for th in data:
            th.join()
        
        a = 0
        data.clear()

if len(data)>0:
    for th in data:
        th.start()
    
    for th in data:
        th.join()
    
    data.clear()

Böyle bir şey hazırlamıştım. Daha sonrasında eski vds te bir sorun olmadığını farkettim. Sorunu şu şekilde çözdüm.


import threading
import time

def fonksiyon():
    pass

liste = []

a = 0
for i in liste:
    a+=1
    threading.Thread(target=fonksiyon, args=(a,i)).start()
    time.sleep(0.01)

Herkese teşekkür ediyorum

2 Beğeni