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).