python-085Đọc toàn bộ đề miễn phí

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]:

PythonTrung bình30 phút

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ủ đề

threadsconcurrent futuresconcurrencyerror handling

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ế.

3 cấp độ gợi ýMở dần khi bạn thật sự cần hỗ trợ.
Phân tích lời giảiGiải thích hướng tư duy và thuật toán.
Code tham khảoDùng để đối chiếu sau khi tự làm.

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.