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. withbloğ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
- İş Parçacıkları ve GIL
- ThreadPoolExecutor
- multiprocessing Temelleri
- Verileri Güvenle Paylaşma