8. Asyncio¶
Şimdiye kadar öğreticideki her betik sırasaldı – her seferinde bir satır çalışır ve beklemesi gereken bir çağrı (bir sensör okuması, bir ağ gidiş-dönüşü, bir anlık görüntü) bitene kadar betiği engeller. Yapılacak tek bir şey olduğu sürece bu işe yarar. Bir uygulamanın aynı anda birkaç şey yapması gerektiği an – bir anlık görüntü döngüsü çalıştırmak ve bir seri komuta yanıt vermek, ve çerçeveleri ağ üzerinden yüklemek – sırasal bir betik çöker. İlk yavaş çağrı, diğer her şeyin ilerlemesini durdurur.
asyncio modülü MicroPython’un buna verdiği yanıttır. Uygulamanın birkaç işi ayrı eşyordamlar olarak tanımlamasına ve bunları tek bir iş parçacığında, iş birliği yaparak eşzamanlı olarak çalıştırmasına olanak tanır – o anda çalışmakta olan eşyordam, beklemesi gerektiğinde kontrolü zamanlayıcıya geri verir. Bir anlık görüntü döngüsü, bir UART okuyucusu ve bir ağ istemcisi aynı betikte yaşayabilir ve birinin yavaş kısımları artık diğerlerini dondurmaz.
İleride gelen sayfalar async/await anahtar sözcüklerini ve Task yaşam döngüsünü, gather() ve wait_for() aracılığıyla koordinasyonu, iptal ve istisna yayılımını, üç yerleşik eşzamanlama ilkelini (Event, Lock, ThreadSafeFlag), uygulama sınıflarını asyncio deyimlerine bağlamak için dil kancalarını, snapshot() metodunun bir eşyordam olarak çalışmasını sağlayan küçük bir CSI sarmalayıcısını ve iş birliğine dayalı zamanlamayla birlikte gelen yaygın tuzakları kapsar.
Koordinasyon
Eşzamanlama ilkelleri
Özel async nesneleri
Döngü kontrolü
Çerçeve yakalama
Tuzaklar
Toparlama