8.16. סיכום¶
עברתם על ה-API של asyncio – החלקים שסקריפט זקוק להם כדי להריץ מספר משימות במקביל על מעבד יחיד:
תזמון שיתופי – המודל שעליו נשארת שאר המודול נשענת. הקורוטינה הרצה מחזיקה בלולאה לעצמה עד שהיא מבצעת
await; החלפות קורות רק ב-awaits אלה.קורוטינות ומשימות –
async defמגדיר יחידת עבודה;asyncio.create_task()מתזמן אחת במקביל ומחזירTaskשהיישום יכול מאוחר יותר להמתין עליה, לבטל אותה, או לזהות אותה.לולאת האירועים – המנוע שמריץ קורוטינות ומשימות.
asyncio.run()היא נקודת הכניסה היחידה שרוב הסקריפטים זקוקים לה; המחלקהLoopחושפת את השאר עבור המקרים הנדירים שזקוקים לכך.תיאום –
gather()עבור פיזור וכינוס,wait_for()עבור מועדים אחרונים,Task.cancelודפוס הניקוי של סעיף ה-finally, התפשטות חריגות דרך משימות וקריאות gather, ומסעף מטפל החריגות של הלולאה.פרימיטיבים לסנכרון –
Eventלאיתות בין קורוטינות,Lockלטיריאליזציה של גישה למשאב משותף לאורך awaits, ו-ThreadSafeFlagלהערת משימת asyncio ממטפל פסיקה.אובייקטים אסינכרוניים מותאמים אישית – מסעפי השפה שמאפשרים למחלקות יישום להשתלב במטבעות הלשון של asyncio.
__await__עבור אובייקטים שהם עצמם יעד שלawait,__aiter__/__anext__עבורasync for, ו-__aenter__/__aexit__עבורasync with.לכידת פריימים – העוטף שהופך את
csi.CSI.snapshot()לקורוטינה ידידותית ל-await, כך שלולאת לכידה רצה לצד עבודת asyncio אחרת.מהמורות –
await-ים נשכחים, לולאות צפופות ללא מסירת שליטה, ביטולים שנבלעו, מצב משותף ששונה לאורך awaits, ושאר המלכודות הספציפיות ל-asyncio.
זה מספיק כדי לכתוב תוכניות שמשלבות עבודת מצלמה, קלט/פלט חומרה, ועבודת רקע מקבילה על אותה הלולאה.
8.16.1. שימוש במדריך זה בהמשך¶
התייחסו לפרקי asyncio כחומר עזר; חזרה לבדוק את צורת ה-async with או את ההתנהגות המדויקת של gather() בכשל של משימת אח היא השימוש המיועד. עמוד העזר של המודול asyncio מפרט כל פונקציה ומחלקה במקום אחד כשהשאלה היא פשוט ”מה השם המדויק של הקריאה הזו“.
עבור פרימיטיבים עשירים יותר הבנויים על גבי המודול – סמפורים, תורים, מחסומים, ואוסף ניכר של עוזרים בצורת יישום – המאגר peterhinch/micropython-async הוא המקור הסטנדרטי המתוחזק על ידי הקהילה.
8.16.2. לאן ממשיכים מכאן¶
רשתות הוא הנושא המרכזי הבא. asyncio.open_connection(), asyncio.start_server(), והמחלקה Stream הם הדרך שבה סקריפט asyncio מדבר עם שאר הרשת מתוך קורוטינה, יחד עם המודולים network ו-socket שמתחתם. כל מה שלמדתם על await, Task, ביטול, ופרימיטיבי הסנכרון עובר ישירות הלאה.