0Pricing
Python Academy · Ders

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 t

asyncio.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 t

TaskGroup — 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 here

Hı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 time

Hı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

  1. Korütinler ve Olay Döngüsü
  2. await, Görevler ve Toplama
  3. Asenkron Bağlam Yöneticileri ve Yineleyiciler
  4. Üretim Ortamlarında Asenkron G/Ç Kalıpları
← Python Academy Sayfasına Dön