8.13. בקרת לולאה

רוב סקריפטי ה-asyncio לעולם אינם נוגעים ישירות בלולאת האירועים – asyncio.run() מספיק. עמוד זה מכסה את ממשק Loop עבור המקרים שבהם הוא אינו מספיק: התקנת מטפל חריגות, הרצת הלולאה במחזור חיים שונה מ-run, או החזקת אובייקט הלולאה לצורכי מדידה.

8.13.1. קבלת הלולאה

  • asyncio.get_event_loop() – מחזירה את אובייקט Loop. בטוחה לקריאה מתוך קורוטינה או מחוצה לה.

  • asyncio.new_event_loop() – ב-MicroPython, מאפסת את מצב הלולאה הקיימת במקום ליצור חדשה. ראוי לחזור על ההערה: ישנה בדיוק לולאת אירועים אחת לכל תוכנית.

אין API להרצת הלולאה מלבד המתודות על Loop ו-asyncio.run().

8.13.2. הרצת הלולאה ישירות

asyncio.run() היא נקודת הכניסה הנכונה כמעט לכל אפליקציה. שתי מתודות של Loop קיימות למקרים שבהם היא אינה כזו.

  • run_until_complete() – בהינתן אובייקט awaitable, מריצה את הלולאה עד שאותו awaitable מסתיים, ואז מחזירה את תוצאתו. שקול לקריאת asyncio.run() יחידה, ללא פירוק הלולאה.

  • run_forever() – מריצה את הלולאה עד שנקראת stop() מתוך משימה. ללא awaitable ברמה העליונה; מצופה מהאפליקציה לתזמן את כל הנדרש באמצעות asyncio.create_task() לפני הקריאה ל-run_forever.

המתודות המשלימות הן stop() (בקשה מהלולאה לעצור לאחר שהמשימה הנוכחית מסתיימת) ו-close() (שחרור משאבי הלולאה).

8.13.3. יצירת משימות מצד הלולאה

  • create_task() – אותה פעולה כמו asyncio.create_task(). הפונקציה החופשית קיימת כדי שקוד האפליקציה לא יצטרך הפניה ללולאה במקרה הנפוץ; המתודה קיימת עבור מדידה שכבר מחזיקה הפניה כזו.

8.13.4. מטפלי חריגות

הלולאה קוראת למטפל כאשר משימה מעלה חריגה שדבר בשרשרת קריאות הקורוטינות לא תפס – מקרה אופייני הוא משימה שהאפליקציה יצרה עם asyncio.create_task() ולעולם לא המתינה לה. מטפל ברירת המחדל מדפיס traceback דרך sys.stderr; עמוד החריגות הראה כיצד להחליפו במשהו מותאם אישית.

  • set_exception_handler() – התקנת מטפל מותאם אישית. המטפל הוא בר-קריאה handler(loop, context) שבו context הוא מילון עם לפחות 'message' ובדרך כלל 'exception' ו-'future'.

  • get_exception_handler() – מחזירה את המטפל המותקן כעת, או None אם נעשה שימוש בברירת המחדל.

  • default_exception_handler() – המטפל המובנה. שימושי בתוך מטפל מותאם אישית שרוצה גם להריץ את התנהגות ברירת המחדל (לרשום ל-flash וגם להדפיס traceback, למשל).

  • call_exception_handler() – מריצה את המטפל המותקן כעת עם מילון context בנוי-ידנית. בעיקר בשימוש על ידי הלולאה עצמה; אפליקציה זקוקה לו לעיתים נדירות.