8.13. Döngü kontrolü¶
Çoğu asyncio betiği olay döngüsüne hiç doğrudan dokunmaz – asyncio.run() yeterlidir. Bu sayfa, yeterli olmadığı durumlar için Loop yüzeyini kapsar: bir istisna işleyicisi kurmak, döngüyü run‘dan farklı bir yaşam döngüsüyle çalıştırmak veya araçlandırma amacıyla döngü nesnesini elde tutmak.
8.13.1. Döngüyü elde etme¶
asyncio.get_event_loop()–Loopnesnesini döndürür. Bir eşyordamın içinden veya dışından çağrılması güvenlidir.asyncio.new_event_loop()– MicroPython’da, yeni bir döngü oluşturmak yerine mevcut döngünün durumunu sıfırlar. Bu not tekrar edilmeyi hak ediyor: her programda tam olarak bir olay döngüsü vardır.
Loop üzerindeki metotlar ve asyncio.run() dışında döngüyü çalıştırmak için bir API yoktur.
8.13.2. Döngüyü doğrudan çalıştırma¶
asyncio.run() neredeyse her uygulama için doğru giriş noktasıdır. Yeterli olmadığı durumlar için iki Loop metodu vardır.
run_until_complete()– bir await edilebilir verildiğinde, o await edilebilir bitene kadar döngüyü çalıştırır, ardından sonucunu döndürür. Döngü söküm işlemi dışarıda bırakılmış tek birasyncio.run()çağrısına eşdeğerdir.run_forever()– döngüyü, bir görevin içindenstop()çağrılana kadar çalıştırır. Üst düzey bir await edilebilir yoktur; uygulamanınrun_foreverçağrılmadan önce ihtiyaç duyduğu her şeyiasyncio.create_task()aracılığıyla zamanlaması beklenir.
Eşlik eden metotlar stop() (mevcut görev bittikten sonra döngünün durmasını ister) ve close() (döngünün kaynaklarını serbest bırakır) metotlarıdır.
8.13.3. Döngü tarafında görev oluşturma¶
create_task()–asyncio.create_task()ile aynı işlem. Bağımsız fonksiyon, uygulama kodunun yaygın durum için bir döngü referansına ihtiyaç duymaması için vardır; metot ise zaten bir referansı olan araçlandırma için vardır.
8.13.4. İstisna işleyicileri¶
Döngü, bir görev eşyordam çağrı zincirinde hiçbir yerin yakalamadığı bir istisna yükselttiğinde bir işleyiciyi çağırır – tipik bir durum, uygulamanın asyncio.create_task() ile oluşturduğu ve hiç await etmediği bir görevdir. Varsayılan işleyici sys.stderr üzerinden bir izleme yazdırır; istisnalar sayfası onu özel bir şeyle nasıl değiştireceğinizi göstermişti.
set_exception_handler()– özel bir işleyici kurar. İşleyici,context‘in en azından'message've genellikle'exception'ile'future'içeren bir sözlük olduğu çağrılabilir birhandler(loop, context)öğesidir.get_exception_handler()– o anda kurulu olan işleyiciyi döndürür veya varsayılan kullanılıyorsaNonedöndürür.default_exception_handler()– yerleşik işleyici. Varsayılan davranışı da çalıştırmak isteyen özel bir işleyicinin içinde kullanışlıdır (örneğin, flash belleğe günlük tutmak ve bir izleme yazdırmak).call_exception_handler()– o anda kurulu olan işleyiciyi elle oluşturulmuş bir context sözlüğüyle çalıştırır. Çoğunlukla döngünün kendisi tarafından kullanılır; bir uygulamanın buna nadiren ihtiyacı olur.