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, await yapana kadar döngüyü tek başına kullanır; geçişler yalnızca bu await’lerde gerçekleşir.

  • Coroutine’ler ve görevlerasync def bir 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 bir Task dö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; Loop sınıfı, buna ihtiyaç duyan nadir durumlar için geri kalanını sunar.

  • Koordinasyon – dağıtma ve toplama için gather(), son tarihler için wait_for(), Task.cancel ve finally cü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çin Lock ve bir kesme işleyicisinden bir asyncio görevini uyandırmak için ThreadSafeFlag.

  • Özel async nesneler – uygulama sınıflarının asyncio deyimlerine bağlanmasını sağlayan dil kancaları. Kendileri await hedefi olan nesneler için __await__, async for için __aiter__ / __anext__ ve async with için __aenter__ / __aexit__.

  • Çerçeve yakalamacsi.CSI.snapshot() işlevini await dostu 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.