asyncio — מתזמן קלט/פלט אסינכרוני#
מודול זה מספק מתזמן ריבוי-משימות שיתופי עבור קורוטינות async/await, יחד עם פרימיטיבים לסנכרון (מנעולים, אירועים) ועבודה לא-חוסמת ברשת TCP באמצעות קוראי וכותבי זרמים. משימות רצות במקביל על לולאת אירועים יחידה; המשימה הרצה כעת מחזירה את השליטה ללולאה באמצעות await.
דוגמה:
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)))
פונקציות ליבה#
- asyncio.create_task(coro: Coroutine) Task#
יצירת משימה חדשה מתוך הקורוטינה הנתונה ותזמונה לריצה.
מחזירה את אובייקט
Taskהמתאים.
- asyncio.run(coro: Coroutine) Any#
יצירת משימה חדשה מתוך הקורוטינה הנתונה והרצתה עד להשלמתה.
מחזירה את הערך שהוחזר על ידי coro.
פונקציות נוספות#
- asyncio.wait_for(awaitable: Awaitable, timeout: float) Any#
המתנה להשלמת awaitable, אך ביטולו אם הוא נמשך יותר מ-timeout שניות. אם awaitable אינו משימה, תיווצר ממנו משימה.
אם מתרחש timeout, היא מבטלת את המשימה ומעלה
asyncio.TimeoutError: על הקורא לתפוס חריגה זו. המשימה מקבלתasyncio.CancelledErrorאשר ניתן להתעלם ממנה או לתפוס אותה באמצעותtry...exceptאוtry...finallyכדי להריץ קוד ניקוי.מחזירה את ערך ההחזרה של awaitable.
זוהי קורוטינה.
- asyncio.wait_for_ms(awaitable: Awaitable, timeout: int) Any#
דומה ל-
wait_for()אך timeout הוא מספר שלם במילישניות.זוהי קורוטינה, והרחבה של MicroPython.
class Task#
- class asyncio.Task#
אובייקט זה עוטף קורוטינה למשימה רצה. ניתן להמתין למשימות באמצעות
await task, מה שימתין להשלמת המשימה ויחזיר את ערך ההחזרה שלה.אין ליצור משימות באופן ישיר, אלא יש להשתמש ב-
create_task()כדי ליצור אותן.
class Event#
- class asyncio.Event#
יצירת אירוע חדש שניתן להשתמש בו לסנכרון משימות. אירועים מתחילים במצב מנוקה.
- set() None#
הגדרת האירוע. כל המשימות הממתינות לאירוע יתוזמנו לריצה.
הערה: יש לקרוא לזה מתוך משימה. אין זה בטוח לקרוא לזה מתוך IRQ, פונקציית callback של המתזמן, או חוט אחר. ראו
ThreadSafeFlag.
class ThreadSafeFlag#
- class asyncio.ThreadSafeFlag#
יצירת דגל חדש שניתן להשתמש בו לסנכרון משימה עם קוד הרץ מחוץ ללולאת asyncio, כגון חוטים אחרים, IRQs, או פונקציות callback של המתזמן. דגלים מתחילים במצב מנוקה.
class Lock#
חיבורי זרם TCP#
- asyncio.open_connection(host: str, port: int, ssl: ssl.SSLContext | bool | None = None) Tuple[Stream, Stream]#
פתיחת חיבור TCP אל ה-host וה-port הנתונים. כתובת ה-host תיפתר באמצעות
socket.getaddrinfo(), שהיא כרגע קריאה חוסמת. אם ssl הוא אובייקטssl.SSLContext, הקשר הזה משמש ליצירת ערוץ התעבורה; אם ssl הואTrue, נעשה שימוש בקשר ברירת מחדל.מחזירה זוג זרמים: זרם קורא וזרם כותב. תעלה
OSErrorייחודי ל-socket אם לא ניתן היה לפתור את ה-host או אם לא ניתן היה ליצור את החיבור.זוהי קורוטינה.
- asyncio.start_server(callback: Callable, host: str, port: int, backlog: int = 5, ssl: ssl.SSLContext | None = None) Server#
הפעלת שרת TCP על ה-host וה-port הנתונים. תתבצע קריאה ל-callback עבור חיבורים נכנסים שהתקבלו, ויועברו לה 2 ארגומנטים: זרם קורא וזרם כותב עבור החיבור.
אם ssl הוא אובייקט
ssl.SSLContext, הקשר הזה משמש ליצירת ערוץ התעבורה.מחזירה אובייקט
Server.זוהי קורוטינה.
- class asyncio.Stream#
זה מייצג חיבור זרם TCP. כדי למזער קוד, מחלקה זו מממשת גם קורא וגם כותב, וגם
StreamReaderוגםStreamWriterהם כינויים למחלקה זו.- get_extra_info(v: str) Any#
קבלת מידע נוסף על הזרם, הנתון על ידי v. הערכים החוקיים עבור v הם:
peername.
- read(n: int = -1) bytes#
קריאת עד n בתים והחזרתם. אם n אינו מסופק או הוא -1, קריאת כל הבתים עד EOF. הערך המוחזר יהיה אובייקט bytes ריק אם נתקלים ב-EOF לפני שנקראים בתים כלשהם.
זוהי קורוטינה.
- readinto(buf: bytearray | memoryview) int#
קריאת עד n בתים לתוך buf, כאשר n שווה לאורך של buf.
מחזירה את מספר הבתים שנקראו לתוך buf.
זוהי קורוטינה, והרחבה של MicroPython.
- readexactly(n: int) bytes#
קריאת בדיוק n בתים והחזרתם כאובייקט bytes.
מעלה חריגת
EOFErrorאם הזרם מסתיים לפני קריאת n בתים.זוהי קורוטינה.
- write(buf: bytes) None#
צבירת buf לחוצץ הפלט. הנתונים נשטפים רק כאשר נקראת
Stream.drain(). מומלץ לקרוא ל-Stream.drain()מיד לאחר קריאה לפונקציה זו.
לולאת אירועים#
- asyncio.new_event_loop() Loop#
איפוס לולאת האירועים והחזרתה.
הערה: מאחר של-MicroPython יש לולאת אירועים יחידה בלבד, פונקציה זו רק מאפסת את מצב הלולאה, היא אינה יוצרת לולאה חדשה.
- class asyncio.Loop#
זה מייצג את האובייקט המתזמן ומריץ משימות. לא ניתן ליצור אותו, השתמשו ב-
get_event_loop()במקום זאת.- run_until_complete(awaitable: Awaitable) Any#
הרצת ה-awaitable הנתון עד להשלמתו. אם awaitable אינו משימה, הוא יקודם למשימה.
- set_exception_handler(handler: Callable) None#
הגדרת מטפל החריגות שייקרא כאשר משימה מעלה חריגה שאינה נתפסת. על ה-handler לקבל שני ארגומנטים:
(loop, context).