8.13. การควบคุม loop¶
สคริปต์ asyncio ส่วนใหญ่ไม่เคยแตะ event loop โดยตรง -- asyncio.run() เพียงพอ หน้านี้ครอบคลุม surface ของ Loop สำหรับกรณีที่มันไม่เพียงพอ: การติดตั้ง exception handler การรัน loop ด้วย lifecycle ที่แตกต่างจาก run หรือการเก็บอ็อบเจกต์ loop ไว้สำหรับการตรวจวัด
8.13.1. การรับ loop¶
asyncio.get_event_loop()-- คืนอ็อบเจกต์Loopปลอดภัยที่จะเรียกจากภายในหรือภายนอก coroutineasyncio.new_event_loop()-- บน MicroPython รีเซ็ตสถานะของ loop ที่มีอยู่ แทนที่จะสร้างอันใหม่ หมายเหตุนี้ควรจำ: มี event loop เพียงหนึ่งเดียวต่อโปรแกรม
ไม่มี API สำหรับ รัน loop นอกจาก method บน Loop และ asyncio.run()
8.13.2. การรัน loop โดยตรง¶
asyncio.run() คือจุดเข้าที่ถูกต้องสำหรับเกือบทุกแอปพลิเคชัน มี method ของ Loop สองอันสำหรับกรณีที่มันไม่ใช่
run_until_complete()-- ให้ awaitable รัน loop จนกว่า awaitable จะเสร็จสิ้น แล้วคืนผลลัพธ์ เทียบเท่ากับการเรียกasyncio.run()ครั้งเดียว โดยไม่มีการทำลาย looprun_forever()-- รัน loop จนกว่าstop()จะถูกเรียกจากภายใน task ไม่มี awaitable ระดับบนสุด แอปพลิเคชันคาดว่าจะกำหนดเวลาสิ่งที่ต้องการผ่านasyncio.create_task()ก่อนเรียกrun_forever
method ที่เป็นคู่คือ stop() (ขอให้ loop หยุดหลังจาก task ปัจจุบันเสร็จ) และ close() (คืนทรัพยากรของ loop)
8.13.3. การสร้าง task ฝั่ง loop¶
create_task()-- การดำเนินการเดียวกับasyncio.create_task()ฟังก์ชันอิสระมีอยู่เพื่อให้โค้ดแอปพลิเคชันไม่ต้องการ loop reference สำหรับกรณีทั่วไป method มีอยู่สำหรับการตรวจวัดที่มี loop reference อยู่แล้ว
8.13.4. Exception handlers¶
loop จะเรียก handler เมื่อ task ยกข้อยกเว้นที่ไม่มีสิ่งใดใน coroutine call chain จับ -- กรณีทั่วไปคือ task ที่แอปพลิเคชันสร้างด้วย asyncio.create_task() และไม่เคย await handler เริ่มต้นจะพิมพ์ traceback ผ่าน sys.stderr หน้า exceptions แสดงวิธีแทนที่ด้วยอะไรที่กำหนดเอง
set_exception_handler()-- ติดตั้ง handler แบบกำหนดเอง handler คือ callablehandler(loop, context)ที่contextเป็น dict ที่มีอย่างน้อย'message'และมักมี'exception'และ'future'get_exception_handler()-- คืน handler ที่ติดตั้งอยู่ปัจจุบัน หรือNoneหากใช้ handler เริ่มต้นdefault_exception_handler()-- handler ในตัว มีประโยชน์ภายใน handler แบบกำหนดเองที่ต้องการ รัน พฤติกรรมเริ่มต้นด้วย (บันทึกไปยัง flash และ พิมพ์ traceback เป็นต้น)call_exception_handler()-- รัน handler ที่ติดตั้งอยู่ปัจจุบันด้วย context dict ที่สร้างด้วยตนเอง ส่วนใหญ่ใช้โดย loop เอง แอปพลิเคชันแทบไม่ต้องการมัน