0Pricing
Python Academy · Ders

Asenkron Bağlam Yöneticileri ve Yineleyiciler

async with ve async for protokollerini uygulayın.

Asenkron Bağlam Yöneticileri ve Yineleyiciler, CoddyKit'te ücretsiz bir Python Academy dersidir. Bu, 4 dersinin 3. 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.

async with İfadesi

Kurulumunda veya kapatılmasında G/Ç beklemesi gereken bağlam yöneticileri için async with kullanın. Yönetilen nesne, __aenter__ ve __aexit__ yöntemlerini uygulamalıdır.

import asyncio

class AsyncFile:
    async def __aenter__(self):
        print("open")
        return self
    async def __aexit__(self, *args):
        print("close")

async def main():
    async with AsyncFile() as f:
        print("using")

asyncio.run(main())

__aenter__ ve __aexit__

Her ikisi de korutindir. Girişte __aenter__, çıkışta ise __aexit__ beklenir; bu, bir özel durum oluşmuş olsa bile geçerlidir.

import asyncio

class DBSession:
    async def __aenter__(self):
        self.conn = await async_connect()
        return self.conn

    async def __aexit__(self, exc_type, exc_val, exc_tb):
        if exc_type:
            await self.conn.rollback()
        else:
            await self.conn.commit()
        await self.conn.close()
        return False

@asynccontextmanager

contextlib.asynccontextmanager, eşzamansız bağlam yöneticilerini eşzamansız üreteç işlevleri olarak yazmanızı sağlar.

from contextlib import asynccontextmanager
import asyncio

@asynccontextmanager
async def managed_resource():
    print("acquire")
    try:
        yield {"status": "ready"}
    finally:
        print("release")

async def main():
    async with managed_resource() as r:
        print(r["status"])

asyncio.run(main())

async for İfadesi

async for, __aiter__ ve __anext__ yöntemlerini uygulayan eşzamansız yinelenebilir bir nesne üzerinde yineleme yapar. Her yineleme G/Ç işlemi içerebilir.

import asyncio

class AsyncCounter:
    def __init__(self, n): self.n, self.i = n, 0
    def __aiter__(self): return self
    async def __anext__(self):
        if self.i >= self.n: raise StopAsyncIteration
        await asyncio.sleep(0)
        self.i += 1
        return self.i

async def main():
    async for val in AsyncCounter(3):
        print(val)

asyncio.run(main())

Eşzamansız Üreteçler

yield içeren bir async def işlevi, eşzamansız bir üreteçtir. Bu üreteçten değer almak için async for kullanın.

import asyncio

async def ticker(n):
    for i in range(n):
        await asyncio.sleep(1)
        yield i

async def main():
    async for val in ticker(3):
        print(val)   # 0, 1, 2 with 1-s pauses

asyncio.run(main())

Eşzamansız Dosya G/Ç için aiofiles

aiofiles kitaplığı, dosya işlemlerini eşzamansız bağlam yöneticileri ve eşzamansız yineleyiciler içinde sarar.

# pip install aiofiles
import aiofiles, asyncio

async def main():
    async with aiofiles.open("data.txt", "r") as f:
        async for line in f:
            print(line.strip())

aiohttp İstemci Oturumu

aiohttp.ClientSession, eşzamanlı HTTP istekleri yapmak için kullanılan bir eşzamansız bağlam yöneticisidir.

# pip install aiohttp
import aiohttp, asyncio

async def fetch(url):
    async with aiohttp.ClientSession() as session:
        async with session.get(url) as resp:
            return await resp.json()

asyncio.run(fetch("https://api.example.com/data"))

Birden Çok Eşzamansız Bağlam Yöneticisi

Birden çok async with yan tümcesini tek satırda sıralayabilirsiniz (Python 3.10 ve sonraki sürümlerde parantezli biçim).

import asyncio

async def main():
    async with (
        open_db() as db,
        open_cache() as cache,
    ):
        data = await db.fetch("SELECT 1")
        await cache.set("key", data)

AsyncExitStack

contextlib.AsyncExitStack, dinamik bir eşzamansız bağlam yöneticileri kümesini yönetir.

from contextlib import AsyncExitStack
import asyncio

async def main():
    async with AsyncExitStack() as stack:
        conn1 = await stack.enter_async_context(connect("db1"))
        conn2 = await stack.enter_async_context(connect("db2"))
        await process(conn1, conn2)

Eşzamansız Kodu pytest-asyncio ile Sınama

pytest-asyncio, @pytest.mark.asyncio işaretleyicisiyle eşzamansız sınama işlevleri yazmanızı sağlar.

# pip install pytest-asyncio
import pytest, asyncio

async def fetch(): return 42

@pytest.mark.asyncio
async def test_fetch():
    result = await fetch()
    assert result == 42

Eşzamansız Yineleyici Protokolü Özeti

Bir nesne, __aiter__ özelliğine sahipse eşzamansız yinelenebilirdir. Ayrıca __anext__ özelliğine de sahipse eşzamansız yineleyicidir. Eşzamansız üreteçler her ikisini de otomatik olarak uygular.

import asyncio

async def gen():
    yield 1
    yield 2

async def main():
    g = gen()
    print(await g.__anext__())   # 1
    print(await g.__anext__())   # 2

Hızlı Kontrol

Bir nesnenin async with ile kullanılabilmesi için hangi özel yöntemleri uygulaması gerekir?

Özet

Eşzamansız kurulum veya kapatma gerektiren kaynaklar için async with kullanın. Değerleri eşzamansız olarak üreten yinelenebilir nesneler için async for kullanın. Eşzamansız üreteçler, eşzamansız yineleyici oluşturmayı kolaylaştırır. aiofiles ve aiohttp gibi kitaplıklar, eşzamansız dosya ve HTTP işlemleri sunar.

Sıkça Sorulan Sorular

“Asenkron Bağlam Yöneticileri ve Yineleyiciler” dersi ücretsiz mi?

Evet — “Asenkron Bağlam Yöneticileri ve Yineleyiciler” 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.

“Asenkron Bağlam Yöneticileri ve Yineleyiciler” dersinde ne öğreneceğim?

async with ve async for protokollerini uygulayı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 3. dersidir.

“Asenkron Bağlam Yöneticileri ve Yineleyiciler” 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