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 בנוי-ידנית. בעיקר בשימוש על ידי הלולאה עצמה; אפליקציה זקוקה לו לעיתים נדירות.