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

Tổng bình phương bằng ThreadPoolExecutor

Khi một phép tính lặp lại trên nhiều phần tử độc lập, ta giao mỗi phần tử cho một luồng

PythonCơ bản12 phút

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

concurrencythread-poolconcurrent-futuresentry-ramp

Kiến thức tiên quyết: python-basics, python-functions.

Nội dung đề bài

Mô tả bài toán

Khi một phép tính lặp lại trên nhiều phần tử độc lập, ta giao mỗi phần tử cho một luồng trong bể luồng rồi thu kết quả về. ThreadPoolExecutor.map là cách gọn nhất: nó giữ đúng thứ tự đầu vào và trả về một iterator mà ta chỉ cần chuyển thành danh sách rồi cộng lại. Vì phép cộng có tính giao hoán, kết quả không phụ thuộc luồng nào chạy xong trước.

Yêu cầu

Viết hàm sum_of_squares(values, max_workers=3):

  • Nếu values rỗng thì ném ValueError.
  • Mở ThreadPoolExecutor(max_workers=max_workers) và dùng pool.map để tính bình

phương của từng phần tử trong values.

  • Thu tất cả kết quả con rồi trả về tổng của chúng.

Quy ước nộp bài

Nộp hàm sum_of_squares trong solution.py. Hệ thống gọi hàm trực tiếp theo tên đối số và so giá trị trả về với kết quả soạn tay; không đọc dữ liệu từ stdin và không in ra stdout.

Input

  • values: danh sách từ 1 đến 20 số nguyên, cho phép số âm và số 0.
  • max_workers: số luồng trong bể, từ 1 đến 4.

Output

Một số nguyên là tổng bình phương của mọi phần tử trong values.

Ràng buộc

  • Danh sách rỗng phải ném ValueError, không được trả về 0.
  • Phải thu kết quả của mọi việc đã ném vào bể; bỏ qua giá trị trả về là sai.
  • Kết quả phải giống nhau ở mọi lần chạy, không phụ thuộc thứ tự luồng hoàn thành.
  • Không dùng sleep và không đo thời gian chạy.

Ví dụ 1

Input

sum_of_squares(values=[1, 2, 3])

Output

14

Ví dụ 2

Input

sum_of_squares(values=[-2, 0, 4])

Output

20

Giải thích

Với values = [1, 2, 3]: bình phương từng phần tử được 1, 4, 9, tổng là 1 + 4 + 9 = 14, nên hàm trả về 14.

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.

Nhóm Zalo