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()Loop nesnesini 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 bir asyncio.run() çağrısına eşdeğerdir.

  • run_forever() – döngüyü, bir görevin içinden stop() çağrılana kadar çalıştırır. Üst düzey bir await edilebilir yoktur; uygulamanın run_forever çağrılmadan önce ihtiyaç duyduğu her şeyi asyncio.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 bir handler(loop, context) öğesidir.

  • get_exception_handler() – o anda kurulu olan işleyiciyi döndürür veya varsayılan kullanılıyorsa None dö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.