8. Asyncio¶
จนถึงตอนนี้ สคริปต์ทุกตัวในบทช่วยสอนเป็น sequential -- บรรทัดเดียวทำงานในแต่ละครั้ง และการเรียกที่ต้องรอ (การอ่านเซนเซอร์ การรับส่งข้อมูลผ่านเครือข่าย การถ่ายสแนปช็อต) จะบล็อกสคริปต์จนกว่าจะเสร็จ นั่นได้ผลเมื่อมีสิ่งเดียวที่ต้องทำ ทันทีที่แอปพลิเคชันต้องทำหลายสิ่งพร้อมกัน -- รัน snapshot loop และ ตอบสนองคำสั่ง serial และ อัปโหลด frame ผ่านเครือข่าย -- สคริปต์แบบ sequential จะล้มเหลว การเรียกที่ช้าครั้งแรกจะหยุดทุกอย่างจากการก้าวหน้า
โมดูล asyncio คือคำตอบของ MicroPython มันให้แอปพลิเคชันอธิบายงานหลายอย่างเป็น coroutines แยกกันและรันพร้อมกันบน single thread แบบ cooperative -- coroutine ที่กำลังทำงานอยู่จะยึดควบคุมกลับไปยัง scheduler เมื่อต้องรอ snapshot loop, UART reader และ network client ทั้งหมดสามารถอยู่ในสคริปต์เดียวกันและส่วนที่ช้าของหนึ่งจะไม่หยุดตัวอื่นอีกต่อไป
หน้าต่างๆ ข้างหน้าครอบคลุม keyword async/await และวงจรชีวิต Task การประสานงานผ่าน gather() และ wait_for() การยกเลิกและการกระจายข้อยกเว้น primitives การ synchronization ในตัวสาม Event, Lock, ThreadSafeFlag hooks ภาษาสำหรับเชื่อม application classes เข้าสู่รูปแบบ asyncio wrapper CSI ขนาดเล็กที่ให้ snapshot() รันเป็น coroutine และข้อผิดพลาดที่พบบ่อยที่มากับ cooperative scheduling
การประสานงาน
primitives การ synchronization
อ็อบเจกต์ async แบบกำหนดเอง
การควบคุม loop
การจับภาพ frame
ข้อผิดพลาดที่พบบ่อย
บทสรุป