Ghi dữ liệu JSON an toàn chống hỏng file
Trong hệ thống lưu trữ checkpoint huấn luyện mô hình AI của AI Empire Academy, các file cấu hình và trọng số được ghi đè định kỳ. Nếu máy chủ mất điện hoặc tiến trình bị kill đúng…
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: file handling, json serialization, os module.
Nội dung đề bài
Mục tiêu kiến thức
- Nắm vững rủi ro hỏng file (File Corruption) khi ghi trực tiếp bằng
open(file, 'w'). - Áp dụng mẫu thiết kế Atomic Write Pattern: ghi ra file tạm →
flush()+fsync()→ đổi tên nguyên tử bằngos.replace(). - Đảm bảo an toàn dọn dẹp file tạm trong khối
try-finallynếu quá trình serialize JSON gặp lỗi.
Mô tả bài toán
Trong hệ thống lưu trữ checkpoint huấn luyện mô hình AI của AI Empire Academy, các file cấu hình và trọng số được ghi đè định kỳ. Nếu máy chủ mất điện hoặc tiến trình bị kill đúng lúc đang thực hiện lệnh open(filepath, 'w').write(), file đích sẽ bị rỗng (0 bytes) hoặc bị hỏng dở dang, phá hủy vĩnh viễn cấu hình trước đó.
Để khắc phục, bạn hãy cài đặt hàm atomic_save_json(file_path: str, data: dict) -> bool thực hiện quy trình ghi nguyên tử:
- Mở một file tạm thời trong cùng thư mục với
file_path(để đảm bảo cùng filesystem, cho phép thao tác atomic rename). - Chuyển đổi
datasang chuỗi JSON (hỗ trợ tiếng Việtensure_ascii=False, thụt lềindent=2) và ghi vào file tạm. - Ép toàn bộ dữ liệu từ buffer của hệ điều hành xuống đĩa cứng vật lý bằng
f.flush()vàos.fsync(f.fileno()). - Thay thế file tạm vào
file_pathbằngos.replace(). - Nếu quá trình thành công, hàm trả về
True. - Nếu xảy ra lỗi (ví dụ:
datachứa kiểu dữ liệu không serialize được nhưset, hoặc đường dẫn không hợp lệ): - Phải xóa bỏ file tạm đã tạo (nếu có).
- Giữ nguyên file đích
file_pathban đầu (nếu đã tồn tại). - Hàm trả về
False(không làm sập chương trình).
Input
file_path: Đường dẫn file đích (str).data: Từ điển dữ liệu cần ghi (dict).
Output
Trả về True nếu ghi thành công nguyên tử, ngược lại trả về False.
Ràng buộc
- Thời gian chạy tối đa: 1000ms.
- Giới hạn bộ nhớ: 256MB.
Ví dụ 1
Input
atomic_save_json('valid.json', {'name': 'AI Empire', 'version': 1})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.
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.
