DOLAR 42,5354 0.07%
EURO 49,5729 -0.06%
ALTIN 5.745,37-0,12
BITCOIN 0%
İstanbul
°

SABAHA KALAN SÜRE

Multi-threaded Script ile İşlem Süresini Yarıladım!
187 okunma

Multi-threaded Script ile İşlem Süresini Yarıladım!

ABONE OL
Nisan 5, 2025 09:56
Multi-threaded Script ile İşlem Süresini Yarıladım!
0

BEĞENDİM

ABONE OL

Multi-threaded Python’da çok iş parçacıklı programlama (multi-threading) kullanmak, özellikle zaman alıcı işlemlerin paralel olarak çalıştırılması gereken durumlarda büyük avantaj sağlar. Bu sayede, birden fazla işlemi aynı anda çalıştırarak işlem sürelerini önemli ölçüde kısaltabilirsiniz.

Bu yazıda, multi-threading kullanarak nasıl işlem sürelerini yarıya indirebileceğimizi ve bunun nasıl çalıştığını adım adım anlatacağım.

Multi-threading Nedir?

Multi-threading, bir programın birden fazla iş parçacığı (thread) kullanarak paralel çalışmasını sağlar. Bu iş parçacıkları aynı süreç (process) içinde çalışır, ancak farklı görevleri bağımsız bir şekilde yerine getirir. Böylece CPU kaynakları daha verimli bir şekilde kullanılabilir ve işlem süreleri kısalabilir.

Python’da multi-threading genellikle threading modülü ile yapılır.

Multi-threading Kullanmanın Avantajları

  1. Zaman Tasarrufu: Uzun süre alan görevleri paralel olarak çalıştırarak zaman tasarrufu sağlarsınız.
  2. Kaynak Kullanımı: CPU’nun kaynaklarını daha verimli kullanarak işlem gücünü artırırsınız.
  3. Kullanıcı Deneyimi: Özellikle web uygulamalarında, işlemlerin kullanıcıyı bekletmeden paralel çalışması kullanıcı deneyimini artırır.

Multi-threading ile Süreyi Nasıl Kısaltırım?

Python’da çok iş parçacıklı bir script yazmak oldukça basittir. Aşağıda, multi-threading kullanarak işlem sürelerini nasıl yarıya indirebileceğinizi gösterecek bir örnek vereceğim.

Örnek: Dosya İndirme Scripti

Diyelim ki, birden fazla dosyayı internetten indirmeniz gerekiyor. Eğer her dosyayı sırayla indirirseniz, bu işlem çok uzun sürebilir. Ancak multi-threading kullanarak her dosyayı aynı anda indirebiliriz.

import threading
import time
import requests

# Dosya indirme fonksiyonu
def download_file(url, filename):
    print(f"{filename} indiriliyor...")
    response = requests.get(url)
    with open(filename, 'wb') as file:
        file.write(response.content)
    print(f"{filename} indirildi.")

# İndireceğimiz dosyaların URL'leri ve isimleri
file_urls = [
    ("https://example.com/file1.zip", "file1.zip"),
    ("https://example.com/file2.zip", "file2.zip"),
    ("https://example.com/file3.zip", "file3.zip"),
    ("https://example.com/file4.zip", "file4.zip")
]

# Çoklu iş parçacığı oluşturulması
threads = []

# Başlangıç zamanı
start_time = time.time()

for url, filename in file_urls:
    # Her dosya için bir iş parçacığı oluşturuluyor
    thread = threading.Thread(target=download_file, args=(url, filename))
    threads.append(thread)
    thread.start()

# Tüm iş parçacıklarının bitmesini bekle
for thread in threads:
    thread.join()

# Bitirme zamanı
end_time = time.time()

print(f"Tüm dosyalar {end_time - start_time} saniyede indirildi.")

Kodun Çalışma Prensibi:

  1. Dosya İndirme Fonksiyonu (download_file):
    • Bu fonksiyon, belirli bir URL’den dosya indirir ve bunu diske kaydeder.
  2. Threading Kullanımı:
    • Her dosya için bir thread oluşturuluyor. Bu sayede her dosya aynı anda indiriliyor.
  3. Thread Başlatma ve Birleştirme:
    • thread.start() ile her bir thread başlatılır.
    • thread.join() ile her bir thread’in tamamlanması beklenir. Bu işlem, tüm thread’lerin bitmesini sağlayana kadar programın devam etmemesini sağlar.
  4. Zaman Hesaplaması:
    • time.time() fonksiyonları ile işlem süresi hesaplanır. Threading kullanarak paralel indirme yapıldığı için işlem süresi daha kısa olacaktır.

Single-threaded ve Multi-threaded Karşılaştırması

  • Single-threaded (Tek iş parçacıklı):
    • Dosyalar sırayla indirilir.
    • Süre, her dosyanın indirilmesi için harcanan süre kadar uzar.
  • Multi-threaded (Çok iş parçacıklı):
    • Dosyalar aynı anda indirildiği için süre önemli ölçüde kısalır.

Örneğin, 4 dosya indiriyorsanız ve her biri 10 saniye sürüyorsa:

  • Tek iş parçacıklı yaklaşımda: 4 dosya * 10 saniye = 40 saniye
  • Çok iş parçacıklı yaklaşımda: 4 dosya aynı anda indirildiği için toplam süre 10 saniye olacaktır.

Multi-threading ile Hız Artışı

Multi-threading kullanarak, özellikle I/O (girdi-çıktı) işlemlerinde büyük hız artışları sağlayabilirsiniz. Dosya indirme gibi işlemler, genellikle ağırlıklı olarak I/O işlemleri olduğu için bu tür paralel işlemler oldukça verimlidir.

Uyarılar ve Dikkat Edilmesi Gerekenler

  • Global Interpreter Lock (GIL): Python, tek bir iş parçacığını çalıştıran bir Global Interpreter Lock (GIL) kullanır. Bu, CPU yoğunluklu işlemler için multi-threading’in hız artışı sağlamasını engelleyebilir. Ancak, I/O işlemleri (dosya okuma, ağ işlemleri vb.) için multi-threading hala çok faydalıdır.
  • Thread-Safe Olmayan Durumlar: Çoklu iş parçacığı kullanırken, aynı kaynağa (değişkene veya dosyaya) birden fazla thread tarafından erişilmesi durumunda race condition ve veri tutarsızlığı gibi sorunlar oluşabilir. Bu tür durumları önlemek için lock veya queue kullanabilirsiniz.

Sonuç:

Multi-threading kullanarak işlem sürelerini önemli ölçüde kısaltabilirsiniz. Bu yaklaşım, özellikle I/O odaklı uygulamalarda oldukça etkilidir. Ancak, CPU odaklı ağır hesaplamalar için multi-threading sınırlı fayda sağlar, çünkü Python’un GIL mekanizması tek bir thread’in çalışmasına izin verir. Yine de, doğru senaryolarda multi-threading kullanmak, performansı büyük ölçüde artırabilir ve programınızın hızını önemli ölçüde iyileştirebilir.

En az 10 karakter gerekli


HIZLI YORUM YAP
300x250r
300x250r