await, Görevler ve Toplama
Eşzamanlılık için await, asyncio.create_task ve asyncio.gather kullanın.
await, Görevler ve Toplama, 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.
await ve Sıralı Çalıştırma
Tek başına await kullanmak, eş yordamları sıralı olarak çalıştırır. Bunları eşzamanlı çalıştırmak için Task'lere sarın.
import asyncio
async def main():
# Sequential — total ~3 s
await asyncio.sleep(2)
await asyncio.sleep(1)
# Concurrent using gather — total ~2 s
await asyncio.gather(asyncio.sleep(2), asyncio.sleep(1))asyncio.create_task()
asyncio.create_task(coro), bir eş yordamı geçerli eş yordamla eşzamanlı olarak bağımsız bir Task şeklinde çalışacak biçimde zamanlar.
import asyncio
async def work(n):
await asyncio.sleep(n)
return n
async def main():
t1 = asyncio.create_task(work(2))
t2 = asyncio.create_task(work(1))
r1 = await t1
r2 = await t2
print(r1, r2) # 2 1 (total ~2 s)
asyncio.run(main())asyncio.gather()
asyncio.gather(*coros), eş yordamları eşzamanlı çalıştırır ve tümü tamamlandığında bütün sonuçları sıralı biçimde döndürür.
import asyncio
async def fetch(i):
await asyncio.sleep(1)
return f"data-{i}"
async def main():
results = await asyncio.gather(fetch(1), fetch(2), fetch(3))
print(results) # ["data-1", "data-2", "data-3"] in ~1 s
asyncio.run(main())return_exceptions ile gather
Başarısız bir eş yordamın tüm gather işlemini iptal etmek yerine istisnasını sonuç olarak döndürmesi için return_exceptions=True ayarlayın.
import asyncio
async def risky(n):
if n == 2: raise ValueError("bad")
return n
async def main():
results = await asyncio.gather(
risky(1), risky(2), risky(3),
return_exceptions=True
)
print(results) # [1, ValueError("bad"), 3]asyncio.wait()
asyncio.wait(tasks, return_when=...) iki küme döndürür: done ve pending. İlk sonuca tepki vermek için FIRST_COMPLETED kullanın.
import asyncio
async def slow(): await asyncio.sleep(3); return "slow"
async def fast(): await asyncio.sleep(1); return "fast"
async def main():
tasks = {asyncio.create_task(slow()), asyncio.create_task(fast())}
done, pending = await asyncio.wait(tasks, return_when=asyncio.FIRST_COMPLETED)
for t in pending: t.cancel()Görevlerin İptal Edilmesi
İptal isteğinde bulunmak için task.cancel() çağrısını yapın. Görev, bir sonraki await noktasında asyncio.CancelledError alır.
import asyncio
async def long_job():
try:
await asyncio.sleep(100)
except asyncio.CancelledError:
print("Cancelled!")
raise # re-raise is required
async def main():
t = asyncio.create_task(long_job())
await asyncio.sleep(1)
t.cancel()
await tasyncio.timeout() — Python 3.11+
İşlemin çok uzun sürmesi durumunda iptal edilmesi için bir await ifadesini asyncio.timeout(seconds) ile sarın.
import asyncio
async def main():
try:
async with asyncio.timeout(2):
await asyncio.sleep(10) # too slow
except TimeoutError:
print("Timed out!")asyncio.wait_for()
Python 3.11'den eski sürümlerde zaman aşımı eklemek için asyncio.wait_for(coro, timeout=N) kullanın; bu ifade asyncio.TimeoutError oluşturur.
import asyncio
async def slow(): await asyncio.sleep(5)
async def main():
try:
await asyncio.wait_for(slow(), timeout=2)
except asyncio.TimeoutError:
print("Timed out")Görev Adları ve İnceleme
Hata ayıklamayı kolaylaştırmak için görevleri asyncio.create_task(coro, name="...") ile adlandırın ve task.get_name() ile inceleyin.
import asyncio
async def worker(): await asyncio.sleep(1)
async def main():
t = asyncio.create_task(worker(), name="worker-1")
print(t.get_name()) # worker-1
await tTaskGroup — Python 3.11+
asyncio.TaskGroup, yapılandırılmış bir görev grubu oluşturur. Herhangi bir görev hata oluşturursa tüm görevler iptal edilir.
import asyncio
async def main():
async with asyncio.TaskGroup() as tg:
t1 = tg.create_task(asyncio.sleep(1))
t2 = tg.create_task(asyncio.sleep(2))
# all tasks done hereHız Sınırlama için Semaphore
Eşzamanlı işlemlerin (örneğin API çağrılarının) sayısını sınırlamak için asyncio.Semaphore(n) kullanın.
import asyncio
sem = asyncio.Semaphore(5) # max 5 concurrent
async def limited_fetch(url):
async with sem:
await fetch(url) # at most 5 at a timeHızlı Kontrol
await coro() ile asyncio.create_task(coro()) arasındaki fark nedir?
Özet
Eşzamanlı yürütme için create_task veya gather kullanın. gather tüm sonuçları toplar; wait ise ayrıntılı denetim sağlar. Görevleri .cancel() ile iptal edin ve wait_for veya asyncio.timeout ile zaman aşımı uygulayın.
Sıkça Sorulan Sorular
“await, Görevler ve Toplama” dersi ücretsiz mi?
Evet — “await, Görevler ve Toplama” 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.
“await, Görevler ve Toplama” dersinde ne öğreneceğim?
Eşzamanlılık için await, asyncio.create_task ve asyncio.gather kullanı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.
“await, Görevler ve Toplama” 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
- Korütinler ve Olay Döngüsü
- await, Görevler ve Toplama
- Asenkron Bağlam Yöneticileri ve Yineleyiciler
- Üretim Ortamlarında Asenkron G/Ç Kalıpları