Bộ thực thi luồng song song có timeout và thu hoạch lỗi cô lập
Viết hàm execute_batch_with_isolation(tasks: list[dict], max_workers: int = 4, timeout_seconds: float = 1.0) -> list[dict]:
Tiến độ của tôi ở bài này
Điểm và code bạn nộp được lưu vào tài khoản sau khi chấm bài.
Đang tải điểm của bạn…
Kiến thức và chủ đề
Kiến thức tiên quyết: threading, exceptions.
Nội dung đề bài
Mục tiêu kiến thức
- Sử dụng concurrent.futures.ThreadPoolExecutor quản lý worker threads an toàn.
- Cô lập lỗi (Fault Isolation): một tác vụ ném ngoại lệ hoặc timeout không làm sập toàn bộ lô xử lý (batch).
- Đảm bảo bảo toàn thứ tự kết quả tương ứng với danh sách tác vụ đầu vào.
Mô tả bài toán
Viết hàm execute_batch_with_isolation(tasks: list[dict], max_workers: int = 4, timeout_seconds: float = 1.0) -> list[dict]:
- Mỗi phần tử trong tasks có định dạng:
- {"id": int, "fn": callable, "args": tuple, "kwargs": dict} (nếu thiếu args thì mặc định (), thiếu kwargs thì mặc định {}).
- Sử dụng ThreadPoolExecutor(max_workers=max_workers):
- Submit tất cả các tác vụ vào pool và lưu map future -> (index, task_id).
- Thu hoạch kết quả:
- Với mỗi task tại vị trí i, lấy kết quả với thời hạn future.result(timeout=timeout_seconds).
- Nếu thành công, trả về dict: {"id": task_id, "status": "SUCCESS", "result": result, "error": None}.
- Nếu bị TimeoutError, trả về: {"id": task_id, "status": "TIMEOUT", "result": None, "error": "Task execution timed out"}.
- Nếu ném ngoại lệ khác Exception as e, trả về: {"id": task_id, "status": "FAILED", "result": None, "error": f"{type(e).name}: {str(e)}"}.
- Trả về danh sách kết quả giữ nguyên đúng thứ tự ban đầu của tasks.
Nếu max_workers <= 0, raise ValueError("max_workers phai lon hon 0").
Input
- Tham số: tasks: list[dict], max_workers: int, timeout_seconds: float.
Output
- Trả về: list[dict] gồm các trường id, status, result, error.
Ràng buộc
- Thời gian chạy tối đa: 1500ms.
- Giới hạn bộ nhớ: 256MB.
- Dữ liệu đầu vào tuân thủ đúng kiểu dữ liệu và miền giá trị được mô tả.
Ví dụ 1
Input
execute_batch_with_isolation(operations=[{'op': 'run_mixed_tasks', 'expected_statuses': ['SUCCESS', 'FAILED', 'SUCCESS']}])
Output
True
Giải thích
Hàm được gọi với các tham số mẫu trên và trả về kết quả chính xác theo yêu cầu.
Ví dụ 2
Input
execute_batch_with_isolation(operations=[{'op': 'run_empty_tasks', 'expected': []}])
Output
True
Giải thích
Hàm được gọi với bộ tham số thứ hai và trả về kết quả tương ứng theo thiết kế.
Gợi ý và lời giải chỉ mở sau khi bạn bấm Nộp bài. Giáo viên và quản trị viên mở được ngay.
Góp ý & báo lỗi bài tập
Đề bài chưa rõ, test có vấn đề hay bạn có ý tưởng giúp bài tốt hơn? Gửi cho đội ngũ AI Empire nhé — mỗi góp ý đều được đọc.
