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.