asyncio — asenkron G/Ç zamanlayıcısı#

Bu modül, async/await eşyordamları (coroutine) için iş birlikçi çoklu görev (cooperative-multitasking) zamanlayıcısının yanı sıra senkronizasyon için ilkeler (kilitler, olaylar) ve akış okuyucuları (stream reader) ile yazıcıları aracılığıyla engellemeyen TCP ağ iletişimi sağlar. Görevler tek bir olay döngüsünde eşzamanlı olarak çalıştırılır; o anda çalışan görev await ile denetimi döngüye geri verir.

Örnek:

import asyncio

async def blink(led, period_ms):
    while True:
        led.on()
        await asyncio.sleep_ms(5)
        led.off()
        await asyncio.sleep_ms(period_ms)

async def main(led1, led2):
    asyncio.create_task(blink(led1, 700))
    asyncio.create_task(blink(led2, 400))
    await asyncio.sleep_ms(10_000)

# Running on an OpenMV Cam
from machine import LED
asyncio.run(main(LED(1), LED(2)))

Çekirdek fonksiyonlar#

asyncio.create_task(coro: Coroutine) Task#

Verilen eşyordamdan yeni bir görev oluşturur ve çalışması için zamanlar.

İlgili Task nesnesini döndürür.

asyncio.current_task() Task#

O anda çalışan görevle ilişkili Task nesnesini döndürür.

asyncio.run(coro: Coroutine) Any#

Verilen eşyordamdan yeni bir görev oluşturur ve tamamlanana kadar çalıştırır.

coro tarafından döndürülen değeri döndürür.

asyncio.sleep(t: float) None#

t saniye uyur (bir float olabilir).

Bu bir eşyordamdır.

asyncio.sleep_ms(t: int) None#

t milisaniye uyur.

Bu bir eşyordam ve bir MicroPython uzantısıdır.

Ek fonksiyonlar#

asyncio.wait_for(awaitable: Awaitable, timeout: float) Any#

awaitable nesnesinin tamamlanmasını bekler, ancak timeout saniyeden uzun sürerse onu iptal eder. awaitable bir görev değilse, ondan bir görev oluşturulur.

Bir zaman aşımı oluşursa, görevi iptal eder ve asyncio.TimeoutError hatasını yükseltir: bunun çağıran tarafından yakalanması gerekir. Görev, yok sayılabilen veya temizleme kodunu çalıştırmak için try...except ya da try...finally ile yakalanabilen asyncio.CancelledError alır.

awaitable nesnesinin dönüş değerini döndürür.

Bu bir eşyordamdır.

asyncio.wait_for_ms(awaitable: Awaitable, timeout: int) Any#

wait_for() ile benzerdir, ancak timeout milisaniye cinsinden bir tam sayıdır.

Bu bir eşyordam ve bir MicroPython uzantısıdır.

asyncio.gather(*awaitables, return_exceptions: bool = False) List#

Tüm awaitables nesnelerini eşzamanlı olarak çalıştırır. Görev olmayan her awaitables, görev haline getirilir.

Tüm awaitables nesnelerinin dönüş değerlerinin bir listesini döndürür.

Bu bir eşyordamdır.

class Task#

class asyncio.Task#

Bu nesne, bir eşyordamı çalışan bir göreve sarmalar. Görevler await task kullanılarak beklenebilir; bu, görevin tamamlanmasını bekler ve görevin dönüş değerini döndürür.

Görevler doğrudan oluşturulmamalı, bunun yerine onları oluşturmak için create_task() kullanılmalıdır.

cancel() None#

Görevin içine asyncio.CancelledError enjekte ederek görevi iptal eder. Görev bu istisnayı yok sayabilir. Temizleme kodu, bunu yakalayarak veya try ... finally aracılığıyla çalıştırılabilir.

class Event#

class asyncio.Event#

Görevleri senkronize etmek için kullanılabilen yeni bir olay oluşturur. Olaylar temizlenmiş durumda başlar.

is_set() bool#

Olay ayarlanmışsa True, aksi takdirde False döndürür.

set() None#

Olayı ayarlar. Olayı bekleyen tüm görevler çalışmak üzere zamanlanır.

Not: Bu, bir görevin içinden çağrılmalıdır. Bunu bir IRQ’dan, zamanlayıcı geri çağırmasından (callback) veya başka bir iş parçacığından çağırmak güvenli değildir. ThreadSafeFlag sınıfına bakın.

clear() None#

Olayı temizler.

wait() None#

Olayın ayarlanmasını bekler. Olay zaten ayarlanmışsa hemen geri döner.

Bu bir eşyordamdır.

class ThreadSafeFlag#

class asyncio.ThreadSafeFlag#

Bir görevi, diğer iş parçacıkları, IRQ’lar veya zamanlayıcı geri çağırmaları (callback) gibi asyncio döngüsünün dışında çalışan kodla senkronize etmek için kullanılabilen yeni bir bayrak (flag) oluşturur. Bayraklar temizlenmiş durumda başlar.

set() None#

Bayrağı ayarlar. Bayrağı bekleyen bir görev varsa, çalışmak üzere zamanlanır.

clear() None#

Bayrağı temizler. Bu, daha önce ayarlanmış olabilecek bir bayrağın, beklemeye geçmeden önce temizlenmiş olduğundan emin olmak için kullanılabilir.

wait() None#

Bayrağın ayarlanmasını bekler. Bayrak zaten ayarlanmışsa hemen geri döner. Bayrak, wait çağrısından dönüldüğünde otomatik olarak sıfırlanır.

Bir bayrak aynı anda yalnızca tek bir görev tarafından beklenebilir.

Bu bir eşyordamdır.

class Lock#

class asyncio.Lock#

Görevleri koordine etmek için kullanılabilen yeni bir kilit oluşturur. Kilitler kilitlenmemiş durumda başlar.

Aşağıdaki yöntemlere ek olarak, kilitler bir async with ifadesinde kullanılabilir.

locked() bool#

Kilit kilitliyse True, aksi takdirde False döndürür.

acquire() bool#

Kilidin kilitlenmemiş duruma gelmesini bekler ve ardından onu atomik bir şekilde kilitler. Herhangi bir anda yalnızca tek bir görev kilidi edinebilir.

Bu bir eşyordamdır.

release() None#

Kilidi serbest bırakır. Kilidi bekleyen görevler varsa, kuyruktaki bir sonraki görev çalışmak üzere zamanlanır ve kilit kilitli kalır. Aksi takdirde, hiçbir görev beklemiyordur ve kilit kilitlenmemiş duruma geçer.

TCP akış bağlantıları#

asyncio.open_connection(host: str, port: int, ssl: ssl.SSLContext | bool | None = None) Tuple[Stream, Stream]#

Verilen host ve port için bir TCP bağlantısı açar. host adresi, şu anda engelleyen bir çağrı olan socket.getaddrinfo() kullanılarak çözümlenir. ssl bir ssl.SSLContext nesnesiyse, taşıma katmanını oluşturmak için bu bağlam kullanılır; ssl True ise, varsayılan bir bağlam kullanılır.

Bir çift akış döndürür: bir okuyucu ve bir yazıcı akışı. Ana bilgisayar çözümlenemezse veya bağlantı kurulamazsa, sokete özgü bir OSError yükseltir.

Bu bir eşyordamdır.

asyncio.start_server(callback: Callable, host: str, port: int, backlog: int = 5, ssl: ssl.SSLContext | None = None) Server#

Verilen host ve port üzerinde bir TCP sunucusu başlatır. callback, gelen, kabul edilmiş bağlantılarla çağrılır ve 2 argüman geçirilir: bağlantı için okuyucu ve yazıcı akışları.

ssl bir ssl.SSLContext nesnesiyse, taşıma katmanını oluşturmak için bu bağlam kullanılır.

Bir Server nesnesi döndürür.

Bu bir eşyordamdır.

class asyncio.Stream#

Bu, bir TCP akış bağlantısını temsil eder. Kodu en aza indirmek için bu sınıf hem bir okuyucu hem de bir yazıcı uygular ve hem StreamReader hem de StreamWriter, bu sınıfa takma ad (alias) olarak işaret eder.

get_extra_info(v: str) Any#

v tarafından verilen, akış hakkında ek bilgi alır. v için geçerli değerler şunlardır: peername.

close() None#

Akışı kapatır.

wait_closed() None#

Akışın kapanmasını bekler.

Bu bir eşyordamdır.

read(n: int = -1) bytes#

En fazla n bayt okur ve döndürür. n sağlanmazsa veya -1 ise, EOF’a kadar tüm baytları okur. Herhangi bir bayt okunmadan önce EOF ile karşılaşılırsa, döndürülen değer boş bir bytes nesnesi olur.

Bu bir eşyordamdır.

readinto(buf: bytearray | memoryview) int#

buf uzunluğuna eşit olan n bayta kadar buf içine okur.

buf içine okunan bayt sayısını döndürür.

Bu bir eşyordam ve bir MicroPython uzantısıdır.

readexactly(n: int) bytes#

Tam olarak n bayt okur ve bunları bir bytes nesnesi olarak döndürür.

Akış, n bayt okunmadan önce sona ererse bir EOFError istisnası yükseltir.

Bu bir eşyordamdır.

readline() bytes#

Bir satır okur ve döndürür.

Bu bir eşyordamdır.

write(buf: bytes) None#

buf nesnesini çıktı arabelleğinde biriktirir. Veriler yalnızca Stream.drain() çağrıldığında boşaltılır. Bu fonksiyonu çağırdıktan hemen sonra Stream.drain() çağırmanız önerilir.

drain() None#

Arabelleğe alınmış tüm çıktı verilerini akışa boşaltır (yazar).

Bu bir eşyordamdır.

class asyncio.Server#

Bu, start_server() tarafından döndürülen sunucu sınıfını temsil eder. Çıkışta sunucuyu kapatmak için bir async with ifadesinde kullanılabilir.

close() None#

Sunucuyu kapatır.

wait_closed() None#

Sunucunun kapanmasını bekler.

Bu bir eşyordamdır.

Olay Döngüsü#

asyncio.get_event_loop() Loop#

Görevleri zamanlamak ve çalıştırmak için kullanılan olay döngüsünü döndürür. Loop sınıfına bakın.

asyncio.new_event_loop() Loop#

Olay döngüsünü sıfırlar ve döndürür.

Not: MicroPython yalnızca tek bir olay döngüsüne sahip olduğundan, bu fonksiyon yalnızca döngünün durumunu sıfırlar, yeni bir döngü oluşturmaz.

class asyncio.Loop#

Bu, görevleri zamanlayan ve çalıştıran nesneyi temsil eder. Oluşturulamaz, bunun yerine get_event_loop() kullanın.

create_task(coro: Coroutine) Task#

Verilen coro nesnesinden bir görev oluşturur ve yeni Task nesnesini döndürür.

run_forever() None#

stop() çağrılana kadar olay döngüsünü çalıştırır.

run_until_complete(awaitable: Awaitable) Any#

Verilen awaitable nesnesini tamamlanana kadar çalıştırır. awaitable bir görev değilse, bir göreve dönüştürülür.

stop() None#

Olay döngüsünü durdurur.

close() None#

Olay döngüsünü kapatır.

set_exception_handler(handler: Callable) None#

Bir Task’in yakalanmayan bir istisna yükselttiğinde çağrılacak istisna işleyicisini ayarlar. handler iki argüman kabul etmelidir: (loop, context).

get_exception_handler() Callable | None#

Geçerli istisna işleyicisini alır. İşleyiciyi veya özel bir işleyici ayarlanmamışsa None döndürür.

default_exception_handler(context: dict) None#

Çağrılan varsayılan istisna işleyicisi.

call_exception_handler(context: dict) None#

Geçerli istisna işleyicisini çağırır. context argümanı olduğu gibi geçirilir ve şu anahtarları içeren bir sözlüktür: 'message', 'exception', 'future'.