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
Tasknesnesini 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.
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.TimeoutErrorhatasını yükseltir: bunun çağıran tarafından yakalanması gerekir. Görev, yok sayılabilen veya temizleme kodunu çalıştırmak içintry...exceptya datry...finallyile yakalanabilenasyncio.CancelledErroralı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.
class Task¶
- class asyncio.Task¶
Bu nesne, bir eşyordamı çalışan bir göreve sarmalar. Görevler
await taskkullanı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.
class Event¶
- class asyncio.Event¶
Görevleri senkronize etmek için kullanılabilen yeni bir olay oluşturur. Olaylar temizlenmiş durumda başlar.
- 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.
ThreadSafeFlagsınıfına bakın.
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.
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 withifadesinde kullanılabilir.
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 birssl.SSLContextnesnesiyse, taşıma katmanını oluşturmak için bu bağlam kullanılır; sslTrueise, 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
OSErroryü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.SSLContextnesnesiyse, taşıma katmanını oluşturmak için bu bağlam kullanılır.Bir
Servernesnesi 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
StreamReaderhem deStreamWriter, 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.
- 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
EOFErroristisnası yükseltir.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 sonraStream.drain()çağırmanız önerilir.
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.
Loopsı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
Tasknesnesini döndü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.
- 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).