0

Những điểm đáng chú ý trên phiên bản Python 3.14.0 vừa mới ra mắt

python-3.14.png

Phiên bản Python 3.14.0

Phiên bản Python 3.14.0 được ra mắt vào ngày 7/10/2025 với một số tính năng đáng chú ý.


PEP 779: Chính thức hỗ trợ chạy đa luồng mà không cần GIL, giúp tận dụng CPU đa nhân tốt hơn. Xem chi tiết

  • GIL (Global Interperter Lock), đây có thể là là một "nỗi đau" của một lập trình viên Python khi nói về hiệu năng đa luồng của Python

    • Nói sơ lượt thì GIL là một khóa toàn cục trong CPython
    • Chỉ một thread trong một process Python được thực thi bytecode tại một thời điểm.
    • Trên máy đa nhân, nhiều thread Python không thực sự chạy song song dẫn đến việc kém hiệu năng khi làm việc CPU-bound.
    • Tuy nhiên, các thư viện C mở rộng (numpy, pandas, PyTorch…) thường phải giải phóng GIL tạm thời khi chạy code nặng để tận dụng đa nhân.
  • Ở phiên bản 3.13 đã phiên bản Python loại bỏ cơ chế GIL tuy nhiên chưa chính thức. Bạn có thể kiểm tra bằng lệnh

    sys._is_gil_enabled()
    
  • Việc loại bỏ GIL phải thêm các công việc cho Python như: thread‑safe, các cấu trúc dữ liệu an toàn đa luồng, các thao tác dọn rác bộ nhớ cũng như việc giữ an toàn cho race condition nên sẽ phải đánh đổi một số hiệu năng. Cụ thể một số benchmark cho thấy:

    • Chậm hơn ~10% ở trên Windows/Linux và ~3% trên MacOS
    • Bộ nhớ sử dụng nhiều hơn 15-20%
  • Hi vọng nó sẽ khắc phục được nhược điểm ở trên các phiên bản Python tiếp theo.


PEP 750 – Hỗ trợ Template Strings. Xem chi tiết

  • Đây là một tiện ích mới, các viết code khá giống kiểu f-string phục vụ cho việc tạo template string, một tính năng như:
    • Escape HTML: Giữ chuỗi HTML an toàn hơn với các cuộc tấn công XSS
      evil = "<script>alert('evil')</script>"
      template = t"<p>{evil}</p>"
      assert html(template) == "<p>&lt;script&gt;alert('evil')&lt;/script&gt;</p>"
      
    • Props spreading: Thêm thuộc tính vào thẻ HTML
      attributes = {"src": "shrubbery.jpg", "alt": "looks nice"}
      template = t"<img {attributes} />"
      assert html(template) == '<img src="shrubbery.jpg" alt="looks nice" />'
      

Hỗ trợ UUID 6 7 8 Xem chi tiết

  • Trong này thực dụng nhất có vẻ là UUID7, phiên bản này là sự kết hợp giữa UUID1UUID4, đồng thời khắc phục một số nhược điểm của nó, cụ thể:

    • UUID1 thì có vấn đề về bảo mật (lộ MAC, lộ thời gian chính xác).
    • UUID4 thì random hoàn toàn. Với một số hệ thống dùng UUID4 làm khóa chính hoặc đánh non clustered index vào nó sẽ gây ra hiện tượng phân mảnh Btree. Với dữ liệu nhỏ thì gần như không có sự khác biệt, nhưng mà khi dữ liệu lớn lên (vài triệu) thì nó sẽ bắt đầu bất ổn dần.
  • Vậy là sau này khi tạo khóa chính ở các hệ thống phân tán, ngoài Snowflake ID thì có thêm một sự lựa chọn nữa là UUID7👍️


Ngoài ra thì nó cũng có một số cải tiến khác

  • PEP 649 – Trì hoãn đánh giá annotation: Cải thiện cách xử lý type annotation, giúp code rõ ràng và linh hoạt hơn.
  • PEP 734 – Multiple interpreters trong stdlib: Hỗ trợ nhiều interpreter chạy song song trong cùng tiến trình.
  • PEP 784 – compression.zstd: Thêm module mới hỗ trợ thuật toán nén Zstandard.
  • PEP 758 – except / except*: Có thể bỏ ngoặc trong một số trường hợp, cú pháp gọn hơn.
  • PEP 768 – Debugger interface: Giao diện gỡ lỗi ngoài cho CPython với chi phí gần như bằng 0.
  • PEP 765 – Quy định chặt chẽ hơn với return/break/continue trong finally.
  • PEP 741 – C API mới: Cải thiện cấu hình Python ở mức thấp.
  • CLI mới: Cho phép kiểm tra tiến trình Python đang chạy với async tasks.
  • À bản này còn more colour hơn nữa 😁

Nguồn tham khảo


Vài lời nhắn nhủ

  • Trong bài viết này mình chỉ tóm tắt những thông tin cơ bản, bạn có thể tham khảo bài viết chính để xem đầy đủ.
  • Theo kinh nghiệm của mình, thường thì phải đợi nó ra tầm 7-10 phiên bản khắc phục và sửa lỗi mới cơ bản ổn định được.
  • Giờ vào trang chủ thì thấy mỗi 3.14 thôi. Mình để link Python 3.13.8 ở đây cho các bạn tiện download phiên bản này nhé.
  • Cảm ơn các bạn.

All Rights Reserved

Viblo
Let's register a Viblo Account to get more interesting posts.