Python'da Async/Await Tekrarı
Olay döngüleri ve eş yordamlar dahil olmak üzere Python'da eşzamansız programlamanın temel kavramlarını gözden geçirin.
Python'da Async/Await Tekrarı, CoddyKit'te ücretsiz bir FastAPI Backend Development Bootcamp dersidir. Bu, 4 dersinin 1. 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, FastAPI Backend Development Bootcamp öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. FastAPI Backend Development Bootcamp kursu toplamda 4 dersten oluşur.
Intro to Asynchronous Python
Python'da eşzamansız programlama dünyasına hoş geldiniz! Bu, programlarınızın her bir görevin bitmesini beklemeden aynı anda birden fazla şey yapmasını sağlar.
Ağ istekleri veya dosya okuma/yazma gibi programınızın aksi takdirde boşta kalacağı bekleme gerektiren görevler için son derece kullanışlıdır.
Sync vs. Async: The Wait Game
Akşam yemeği hazırladığınızı hayal edin:
- Eşzamanlı (Synchronous): Sebzeleri doğrarsınız, sonra pişmelerini beklersiniz, ardından bulaşıkları yıkarsınız. Her seferinde sadece bir iş yapılır.
- Eşzamansız (Asynchronous): Sebzeleri doğrarsınız, ocağa koyarsınız ve onlar pişerken (beklerken) bulaşıkları yıkamaya başlarsınız. Bir görev beklerken diğerine geçerek aynı anda birden fazla işi yürütürsünüz.
Eşzamansız programlama, programınızın beklemede kalmak yerine meşgul kalmasına yardımcı olur!
The `async` Keyword: Coroutines
Python'da, eş yordam (coroutine) adı verilen özel bir fonksiyon türünü tanımlamak için async anahtar sözcüğünü kullanırız. Eş yordam, duraklatılıp devam ettirilebilen bir fonksiyondur.
Çağrıldığında hemen çalışmaz; bunun yerine, çalışması için bir olay döngüsü (event loop) tarafından zamanlanması gereken bir 'eş yordam nesnesi' döndürür.
import asyncio
async def hello_world():
print("Hello, async world!")
# Calling it directly doesn't run it!
# It returns a coroutine object.
coro_obj = hello_world()
print(f"Type of coro_obj: {type(coro_obj)}")
# To actually run it, you need an event loop.
# We'll see how in a moment!
`await`: Pausing Execution
await anahtar kelimesi, bir async def fonksiyonu (eş yordam) içerisinde, başka bir bekleme nesnesi (başka bir eş yordam veya Future gibi) tamamlanana kadar yürütmeyi duraklatmak için kullanılır.
Bir eş yordam bir şeyi await ettiğinde, kontrolü geçici olarak olay döngüsüne geri verir ve diğer görevlerin çalışmasına izin verir. Bu, engelleyici olmayan davranışın anahtarıdır.
import asyncio
async def cook_rice():
print("Starting to cook rice...")
await asyncio.sleep(2) # Simulate 2 seconds of cooking
print("Rice is cooked!")
async def chop_veg():
print("Chopping vegetables...")
await asyncio.sleep(1) # Simulate 1 second of chopping
print("Vegetables chopped!")
async def main_meal():
await chop_veg() # Wait for chopping to finish
await cook_rice() # Then wait for rice to cook
print("Dinner is ready!")
# This will run sequentially for now.
# We'll make it concurrent soon!
asyncio.run(main_meal())
The Event Loop: The Orchestrator
Olay döngüsünü bir orkestra şefi olarak düşünün. Şunlardan sorumludur:
- Eş yordamların (coroutines) ne zaman çalışacağını planlamak.
- G/Ç olaylarını yönetmek (ağ verisinin gelmesi gibi).
- Biri beklediğinde (örneğin
awaitnedeniyle) görevler arasında geçiş yapmak.
Python'un asyncio modülü, olay döngüsü için gereken altyapıyı sağlar.
Running Async Code with `asyncio.run()`
Eşzamansız bir programı yürütmek için genellikle asyncio.run() kullanırsınız. Bu fonksiyon:
- Mevcut iş parçacığı (thread) için bir olay döngüsü (event loop) alır.
- Sağlanan eş yordamı (coroutine) tamamlanana kadar çalıştırır.
- Olay döngüsünün yaşam döngüsünü yönetir.
Bu, en üst seviyedeki eşzamansız fonksiyonunuzu başlatmanın en basit yoludur.
import asyncio
async def say_hello():
print("Hello from coroutine!")
await asyncio.sleep(0.5) # Wait for 0.5 seconds
print("Goodbye from coroutine!")
async def main():
print("Starting async program...")
await say_hello()
print("Async program finished.")
# This is the entry point for your async application
asyncio.run(main())
Simulating Non-Blocking Operations
asyncio.sleep(), mevcut eş yordamı (coroutine) belirli bir süre boyunca duraklatan bir 'awaitable' nesnesidir. Önemli bir nokta olarak, bu işlem tüm programı engellemez (block etmez). Bir eş yordam uyurken, olay döngüsü (event loop) diğer eş yordamlara geçiş yapabilir ve onları çalıştırabilir.
Asenkron programlama, çoklu iş parçacıklarına (threads) ihtiyaç duymadan eş zamanlılığı bu şekilde sağlar.
import asyncio
import time
async def task_one():
print(f"Task One started at {time.strftime('%X')}")
await asyncio.sleep(2)
print(f"Task One finished at {time.strftime('%X')}")
async def task_two():
print(f"Task Two started at {time.strftime('%X')}")
await asyncio.sleep(1)
print(f"Task Two finished at {time.strftime('%X')}")
async def main():
start_time = time.monotonic()
await task_one()
await task_two()
end_time = time.monotonic()
print(f"Total time: {end_time - start_time:.2f} seconds")
asyncio.run(main())
Concurrent Execution with `asyncio.gather`
Birden fazla eş yordamı (coroutine) gerçekten eş zamanlı olarak çalıştırmak (yani biri beklediğinde yürütülmelerinin iç içe geçebilmesi) için asyncio.gather() kullanırız.
asyncio.gather(), birden fazla awaitable nesnesini alır ve bunları olay döngüsünde (event loop) 'paralel' olarak çalışacak şekilde zamanlayarak hepsinin tamamlanmasını bekler.
import asyncio
import time
async def fetch_data(delay, name):
print(f"Fetching {name} data... (starts at {time.strftime('%X')})")
await asyncio.sleep(delay) # Simulate network request
print(f"Finished {name} data. (ends at {time.strftime('%X')})")
return f"Data from {name}"
async def main():
start_time = time.monotonic()
# Run fetch_data for 'users' and 'products' concurrently
user_data, product_data = await asyncio.gather(
fetch_data(2, "users"),
fetch_data(1, "products")
)
end_time = time.monotonic()
print(f"\nReceived: {user_data}, {product_data}")
print(f"Total time: {end_time - start_time:.2f} seconds")
asyncio.run(main())
Async/Await Concepts Check
Python'ın async ve await anahtar kelimeleriyle ilgili aşağıdaki ifadelerden hangileri DOĞRUDUR?
Refresher Recap & Next Steps
Harika! Python'un eşzamansız (asynchronous) temelleri hakkındaki bilgilerinizi tazelediniz:
- Eşzamansız programlama, G/Ç (I/O) bağımlı görevlerin verimli bir şekilde yönetilmesine yardımcı olur.
async def, duraklatılabilen işlevler olan eşyordamları (coroutines) tanımlar.await, bir eşyordamı duraklatarak kontrolü olay döngüsüne (event loop) devreder.- Olay döngüsü, eşyordam yürütülmesini yönetir.
asyncio.run(), eşzamansız uygulamanızı başlatır.asyncio.gather(), birden fazla eşyordamın eşzamanlı olarak çalıştırılmasına olanak tanır.
Sırada, FastAPI'nin yüksek performanslı web API'leri oluşturmak için bu güçlü kavramlardan nasıl yararlandığını göreceğiz!
Sıkça Sorulan Sorular
“Python'da Async/Await Tekrarı” dersi ücretsiz mi?
Evet — “Python'da Async/Await Tekrarı” 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 FastAPI Backend Development Bootcamp kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. FastAPI Backend Development Bootcamp kursu toplamda 4 dersten oluşur.
“Python'da Async/Await Tekrarı” dersinde ne öğreneceğim?
Olay döngüleri ve eş yordamlar dahil olmak üzere Python'da eşzamansız programlamanın temel kavramlarını gözden geçirin. FastAPI Backend Development Bootcamp 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.
FastAPI Backend Development Bootcamp öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te FastAPI Backend Development Bootcamp, 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 1. dersidir.
“Python'da Async/Await Tekrarı” 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 FastAPI Backend Development Bootcamp dersinde kod yazıp çalıştırabilir miyim?
Evet. Her FastAPI Backend Development Bootcamp 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
- Python'da Async/Await Tekrarı
- FastAPI ve Eşzamansız İşlemler
- Arka Plan Görevlerini Yürütme
- Gerçek Zamanlı İletişim için WebSockets