16 Haziran 2025 Pazartesi
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, 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.
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.
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.")
download_file):
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.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.Örneğin, 4 dosya indiriyorsanız ve her biri 10 saniye sürüyorsa:
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.
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.