8.16. Toparlama¶
Asyncio’nun API’sini – bir betiğin tek bir CPU üzerinde birden çok işi eşzamanlı çalıştırmak için ihtiyaç duyduğu parçaları – baştan sona geçtiniz:
İşbirlikçi zamanlama – modülün geri kalanının dayandığı model. Çalışan coroutine,
awaityapana kadar döngüyü tek başına kullanır; geçişler yalnızca bu await’lerde gerçekleşir.Coroutine’ler ve görevler –
async defbir iş birimi tanımlar;asyncio.create_task()birini eşzamanlı olarak zamanlar ve uygulamanın daha sonra üzerinde bekleyebileceği, iptal edebileceği veya tanımlayabileceği birTaskdöndürür.Olay döngüsü – coroutine’leri ve görevleri çalıştıran motor.
asyncio.run(), çoğu betiğin ihtiyaç duyduğu tek giriş noktasıdır;Loopsınıfı, buna ihtiyaç duyan nadir durumlar için geri kalanını sunar.Koordinasyon – dağıtma ve toplama için
gather(), son tarihler içinwait_for(),Task.cancelvefinallycümlesi temizleme deseni, görevler ve gather çağrıları aracılığıyla istisna yayılımı ve döngünün istisna işleyici kancası.Eşzamanlama ilkelleri – coroutine’ler arasında sinyalleme için
Event, await’ler boyunca paylaşılan bir kaynağa erişimi seri hale getirmek içinLockve bir kesme işleyicisinden bir asyncio görevini uyandırmak içinThreadSafeFlag.Özel async nesneler – uygulama sınıflarının asyncio deyimlerine bağlanmasını sağlayan dil kancaları. Kendileri
awaithedefi olan nesneler için__await__,async foriçin__aiter__/__anext__veasync withiçin__aenter__/__aexit__.Çerçeve yakalama –
csi.CSI.snapshot()işleviniawaitdostu bir coroutine’e dönüştüren sarmalayıcı, böylece bir yakalama döngüsü diğer asyncio işleriyle yan yana çalışır.Tuzaklar – unutulmuş
await‘ler, denetim bırakmayan sıkı döngüler, yutulan iptaller, await’ler boyunca değiştirilen paylaşılan durum ve asyncio’ya özgü diğer tuzaklar.
Bu, kamera işini, donanım G/Ç’sini ve eşzamanlı arka plan işini aynı döngü üzerinde harmanlayan programlar yazmaya yeter.
8.16.1. Bu başvuruyu daha sonra kullanmak¶
Asyncio bölümlerini başvuru materyali olarak değerlendirin; async with yapısı veya bir kardeş hatasında gather() işlevinin tam davranışı için geri dönmek amaçlanan kullanımdır. asyncio başvuru sayfası, soru sadece “bu çağrının tam adı nedir” olduğunda her işlevi ve sınıfı tek bir yerde listeler.
Modülün üzerine inşa edilmiş daha zengin ilkeller için – semaforlar, kuyruklar, bariyerler ve önemli bir uygulama biçimli yardımcı koleksiyonu – peterhinch/micropython-async deposu, standart topluluk tarafından yönetilen kaynaktır.
8.16.2. Buradan nereye gidilir¶
Ağ iletişimi bir sonraki ana konudur. asyncio.open_connection(), asyncio.start_server() ve Stream sınıfı, bir asyncio betiğinin bir coroutine’in içinden ağın geri kalanıyla nasıl konuştuğunu, altta yatan network ve socket modülleriyle birlikte gösterir. await, Task, iptal ve eşzamanlama ilkelleri hakkında öğrendiğiniz her şey doğrudan ileriye taşınır.