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 đượ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.ThreadPoolExecutorquả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
taskscó định dạng: {"id": int, "fn": callable, "args": tuple, "kwargs": dict}(nếu thiếuargsthì mặc định(), thiếukwargsthì 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ạnfuture.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ườngid,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
TrueGiả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
TrueGiả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.
