8. Asyncio¶
Cho đến nay mọi tập lệnh trong hướng dẫn đều là tuần tự -- mỗi lần chạy một dòng, và một lời gọi phải chờ (đọc cảm biến, chuyến khứ hồi mạng, chụp ảnh) sẽ chặn tập lệnh cho đến khi hoàn thành. Điều đó hoạt động khi chỉ có một việc cần làm. Ngay khi ứng dụng cần làm nhiều việc cùng một lúc -- chạy vòng lặp chụp ảnh và trả lời lệnh serial, và tải khung hình qua mạng -- một tập lệnh tuần tự sẽ bị phá vỡ. Lời gọi chậm đầu tiên dừng tất cả mọi thứ khác.
Mô-đun asyncio là câu trả lời của MicroPython. Nó cho phép ứng dụng mô tả nhiều công việc dưới dạng coroutine riêng biệt và chạy chúng đồng thời trên một luồng đơn, hợp tác -- bất kỳ coroutine nào đang chạy sẽ nhường quyền điều khiển cho bộ lập lịch mỗi khi nó phải chờ. Vòng lặp chụp ảnh, bộ đọc UART, và client mạng có thể cùng tồn tại trong một tập lệnh và các phần chậm của cái này không còn làm đóng băng những cái kia.
Các trang tiếp theo bao gồm các từ khóa async/await và vòng đời Task, điều phối qua gather() và wait_for(), hủy tác vụ và lan truyền ngoại lệ, ba nguyên thủy đồng bộ hóa tích hợp (Event, Lock, ThreadSafeFlag), các hook ngôn ngữ để tích hợp các lớp ứng dụng vào các idiom asyncio, một bộ bọc CSI nhỏ giúp snapshot() chạy như một coroutine, và các bẫy phổ biến đi kèm với lập lịch hợp tác.
Nguyên thủy đồng bộ hóa
Đối tượng bất đồng bộ tùy chỉnh
Điều khiển vòng lặp
Chụp khung hình
Các bẫy phổ biến
Tổng kết