0Pricing
Python Academy · Ders

ThreadPoolExecutor

Görevleri eşzamanlı çalıştırın

ThreadPoolExecutor, CoddyKit'te ücretsiz bir Python Academy dersidir. Bu, 4 dersinin 2. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Python Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Python Academy kursu toplamda 4 dersten oluşur.

Neden Thread Havuzu

İş parçacıklarını elle oluşturup birleştirmek zahmetlidir. concurrent.futures.ThreadPoolExecutor, worker iş parçacıklarından oluşan bir havuzu sizin için yönetir ve sonuçları düzenli biçimde döndürür.

from concurrent.futures import ThreadPoolExecutor

def square(n):
    return n * n

with ThreadPoolExecutor() as ex:
    future = ex.submit(square, 5)
    print(future.result())

submit ve Future

submit() bir çağrıyı planlar ve hemen bir Future döndürür. Değeri almak için üzerinde .result() çağrısı yaparsınız; bu çağrı değer hazır olana kadar bekler.

from concurrent.futures import ThreadPoolExecutor

def greet(name):
    return 'hi ' + name

with ThreadPoolExecutor(max_workers=2) as ex:
    f1 = ex.submit(greet, 'Ana')
    f2 = ex.submit(greet, 'Bob')
    print(f1.result())
    print(f2.result())

Çok Sayıda Girdi İçin map

executor.map(func, iterable), işlevi her öğe üzerinde eşzamanlı olarak çalıştırır ve sonuçları girdi sırasına göre üretir.

from concurrent.futures import ThreadPoolExecutor

def cube(n):
    return n ** 3

with ThreadPoolExecutor() as ex:
    results = ex.map(cube, range(5))
    print(list(results))

Worker Sayısını Denetleme

max_workers, aynı anda çalışacak iş parçacığı sayısını sınırlar. G/Ç ağırlıklı işlerde CPU çekirdeği sayısından daha fazla worker kullanabilirsiniz.

from concurrent.futures import ThreadPoolExecutor
import time

def io_task(n):
    time.sleep(0.05)
    return n

start = time.perf_counter()
with ThreadPoolExecutor(max_workers=4) as ex:
    print(list(ex.map(io_task, range(4))))
print('ran concurrently')

as_completed

as_completed(futures), gönderim sırasından bağımsız olarak her Future'ı tamamlandığı anda üretir. Sonuçları gelir gelmez işlemek için idealdir.

from concurrent.futures import ThreadPoolExecutor, as_completed
import time

def work(n):
    time.sleep(0.01 * (3 - n))
    return n

with ThreadPoolExecutor() as ex:
    futures = [ex.submit(work, i) for i in range(3)]
    for f in as_completed(futures):
        print('finished', f.result())

Özel Durumları Yönetme

Bir görev özel durum oluşturursa bu özel durum Future içinde saklanır ve .result() çağrısı yaptığınızda yeniden oluşturulur. Bu çağrıyı try/except bloğuna alın.

from concurrent.futures import ThreadPoolExecutor

def risky(n):
    if n == 0:
        raise ValueError('cannot be zero')
    return 10 // n

with ThreadPoolExecutor() as ex:
    f = ex.submit(risky, 0)
    try:
        print(f.result())
    except ValueError as e:
        print('caught:', e)

Birden Çok Bağımsız Değerle Eşleme

map, yerleşik map gibi birden çok yinelenebilir kabul eder ve bunları bağımsız değerler olarak birlikte eşler.

from concurrent.futures import ThreadPoolExecutor

def add(a, b):
    return a + b

with ThreadPoolExecutor() as ex:
    print(list(ex.map(add, [1, 2, 3], [10, 20, 30])))

Sonuçları Sözlükte Toplama

Yaygın bir yaklaşım, as_completed kullanırken hangi sonucun hangisi olduğunu bilmek için her Future'ı kendi girdisiyle eşlemektir.

from concurrent.futures import ThreadPoolExecutor, as_completed

def length(word):
    return len(word)

words = ['cat', 'tiger', 'ox']
with ThreadPoolExecutor() as ex:
    future_to_word = {ex.submit(length, w): w for w in words}
    out = {}
    for f in as_completed(future_to_word):
        out[future_to_word[f]] = f.result()
print(sorted(out.items()))

Bağlam Yöneticisiyle Kapatma

Executor'ı bir with bloğunda kullanmak shutdown() işlevini otomatik olarak çağırır ve bekleyen tüm görevlerin tamamlanmasını bekler.

from concurrent.futures import ThreadPoolExecutor

def job(n):
    return n * 2

with ThreadPoolExecutor() as ex:
    futures = [ex.submit(job, i) for i in range(3)]
print('all tasks done after the with block')
print([f.result() for f in futures])

Future Durumunu Denetleme

Bir Future, ilerlemeyi beklemeden inceleyebilmeniz için .done() ve .running() yöntemlerini sunar.

from concurrent.futures import ThreadPoolExecutor

def quick(n):
    return n + 1

with ThreadPoolExecutor() as ex:
    f = ex.submit(quick, 41)
    result = f.result()
    print('done?', f.done())
    print('value:', result)

Ne Zaman Kullanılmalı

ThreadPoolExecutor, çok sayıda küçük G/Ç ağırlıklı görev için idealdir: HTTP çağrıları, dosya okumaları ve veritabanı sorguları. CPU ağırlıklı işler için bunun yerine ProcessPoolExecutor kullanın.

from concurrent.futures import ThreadPoolExecutor

urls = ['a', 'b', 'c']

def fetch(u):
    return 'fetched ' + u

with ThreadPoolExecutor(max_workers=3) as ex:
    for r in ex.map(fetch, urls):
        print(r)

Hızlı Kontrol

ThreadPoolExecutor hakkındaki anlayışınızı sınayın.

Özet

ThreadPoolExecutor kullanmayı öğrendiniz:

  • submit() bir Future döndürür; map() bir yinelenebilir üzerinde sırayla çalışır.
  • as_completed(), tamamlandıkça Future'ları üretir.
  • Özel durumlar result() aracılığıyla ortaya çıkar.
  • with bloğu kapatma işlemini yönetir.

Sırada: multiprocessing ile gerçek paralellik.

Sıkça Sorulan Sorular

“ThreadPoolExecutor” dersi ücretsiz mi?

Evet — “ThreadPoolExecutor” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Python Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Python Academy kursu toplamda 4 dersten oluşur.

“ThreadPoolExecutor” dersinde ne öğreneceğim?

Görevleri eşzamanlı çalıştırın Python Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

Python Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te Python Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 2. dersidir.

“ThreadPoolExecutor” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu Python Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her Python Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. İş Parçacıkları ve GIL
  2. ThreadPoolExecutor
  3. multiprocessing Temelleri
  4. Verileri Güvenle Paylaşma
← Python Academy Sayfasına Dön