21 điểm bởi darjeeling 2025-05-20 | 12 bình luận | Chia sẻ qua WhatsApp

Bây giờ là thời điểm tốt để đóng góp cho Free Threading Python

Tôi sẽ tóm tắt ngắn gọn những gì hiện đã nắm được về Free Threading Python từ PyCon US 2025 và整理 lại cách có thể đóng góp.

Free Threading Python là gì?

Free Threading Python là một dự án nhằm loại bỏ GIL (Global Interpreter Lock) của Python để cải thiện hiệu năng trong môi trường đa luồng. Dự án này được bắt đầu để cải thiện hiệu năng multithreading của Python và mang lại hiệu năng tốt hơn cho các tác vụ CPU-bound.

Hiện tại nó vẫn đang ở giai đoạn thử nghiệm, và bạn cần biên dịch lại để cài đặt hoặc cài qua uv.

Tình hình hiện tại

Bản thân tôi cũng mới chỉ thử nghiệm, nhưng được biết phần lớn các thư viện Python thuần đều không gặp vấn đề khi sử dụng. Tuy nhiên, nhiều thư viện được dùng phổ biến thường gọi tới thư viện viết bằng C/C++ hoặc tự triển khai dưới dạng extension vì lý do hiệu năng hay cách cài đặt, nên để dùng các thư viện đó với Free Threading Python thì cần áp dụng nhiều phương án khác nhau.

Trường hợp dùng extension module

Phần lớn sẽ dùng các cách sau, và có hướng dẫn porting.

  • C API
  • Cython
  • PyBind11
  • nanonbind
  • PyO3
  • f2py

CFFI hiện vẫn chưa được hỗ trợ, nhưng có thể hỗ trợ bằng cách dùng fork của Quansight.
issue nói rằng sẽ không hỗ trợ, nhưng vì CFFI chủ yếu được dùng để interfacing nên đây cũng là một quyết định có thể hiểu được. Nếu dùng CFFI đã được fork thì vẫn có thể dùng Free Threading Python, nhưng vì không phải là triển khai quá tinh chỉnh nên có vẻ hiệu năng sẽ giảm.

Cách đóng góp

Từ đây có cảm giác như đang tự lao mình xuống một cái hố sâu, nhưng khi tham gia sprint thì mọi người đều khá tích cực, nên có vẻ hiện giờ vẫn là thời điểm tốt để đóng góp. Có thể đóng góp theo các cách sau.

Tham khảo các tài nguyên sau để kiểm tra mức độ tương thích với free-threading-python

Sau khi kiểm thử thì đăng issue

Hãy cài 3.13 free-threading python trước, sau đó cài thư viện và chạy test.
Nếu có thể thì nên thử cả phiên bản 3.14t, nhưng vì vẫn đang là beta nên tốt hơn là hãy thử bản 3.13 trước.

Porting rồi gửi PR

Từ đây trở đi sẽ hơi khó hơn. Bạn cần có mức hiểu biết nhất định về đa luồng, nhiều system call khác nhau, cũng như nội bộ của C/C++ và Python.
Điểm khó nhất là các thư viện thường có phụ thuộc lẫn nhau, nên khi một thư viện khác được dùng mà thư viện đó vẫn chưa hỗ trợ thì phải bắt đầu từ đó.

Khi tham gia sprint tôi cũng mới chỉ nắm ở mức khái quát, nhưng thường sẽ theo kiểu như thế này.

  • fastapi -> uvicorn -> uvloop, cryptography, pycares

Viết bài về cách đóng góp

Tôi đang làm điều đó ngay lúc này, nhưng chắc vẫn còn thiếu sót. Hãy viết bài và đăng ở nhiều nơi.

Viết về cách sử dụng free-threading-python

Vì các bài viết bằng tiếng Hàn còn thiếu, nên sẽ rất tốt nếu bạn làm benchmark hiệu năng, viết cách sử dụng, tổng hợp lại rồi đăng thành bài viết.

Vì sao nên đóng góp ngay lúc này

Tôi nghĩ mình đã ở trong hệ sinh thái mã nguồn mở khoảng hơn 25 năm. Tôi không phải là một người đóng góp mã nguồn mở quá xuất sắc, nhưng những người quen quanh tôi đã đóng góp rất nhiều, trong đó còn có tới hai CPython Core Developer và nhiều người khác nữa. Vì thế, khi trò chuyện với họ, tôi có một linh cảm riêng.

Đóng góp vào lúc chưa có gì hoặc vào thời kỳ đại biến động là tốt nhất. Ví dụ, ở giai đoạn đầu của Python, chị Jang Hye đã đóng góp nhiều thứ, trong đó có unicode và codec tiếng Hàn. Khi đó gần như chưa có gì, và vì những người đóng góp chủ chốt không rành codec tiếng Hàn nên tôi nghĩ việc tiếp cận khi ấy tương đối dễ. Rồi cuộc chuyển đổi lớn tiếp theo là lúc chuyển sang python3. Sau đó là phía asyncio, và ở mảng đó tôi nhớ đến anh Kim Jun-gi cùng nhiều người khác nữa. Giờ đây lại xuất hiện một tính năng mới là free-threading. Tôi nghĩ hiện tại chính là thời điểm tốt nhất để đóng góp.

Với các ngôn ngữ khác, thay đổi thường do công ty quyết định hoặc được tạo ra trong các framework do những tập đoàn lớn quản lý, nên không dễ tham gia. Tất nhiên Python cũng không phải là cực kỳ dễ tiếp cận, nhưng vì có vô số thư viện và framework tồn tại, và hiện giờ có thể port từng cái một, lại cần nhiều nhân lực, nên đây chính là thời điểm đó.

12 bình luận

 
ahwjdekf 2025-05-22

Một phần lớn lý do Python trở nên phổ biến là vì trước giờ không cần phải cân nhắc đến cả những chuyện đa luồng như thế này. Nếu phải tính đến cả những thứ đó thì với người bình thường, nó sẽ trở thành một ngôn ngữ không còn dễ dùng nữa.

 
darjeeling 2025-05-23

Đây vẫn chỉ là tính năng tùy chọn, và khả năng cao đa luồng sẽ tiếp tục là một tùy chọn. (ví dụ bật tùy chọn này lên hoặc phải cài đặt riêng, v.v.)
Tôi cũng không hay dùng Type, còn free-threading thì có vẻ tôi sẽ dùng trong một số trường hợp vì vấn đề hiệu năng, nhưng chắc sẽ rất hạn chế.

 
corona10 2025-05-23

Tôi không xem đây là tùy chọn. Sau khi PEP 779 được phê duyệt, mục tiêu trong tương lai là chuyển trình triển khai mặc định sang free-threaded.

 
darjeeling 2025-05-27

Ý tôi chỉ là có lẽ có thể dùng nó mà không cần phải băn khoăn như với type. Hehe.

 
ahwjdekf 2025-05-22

free threading python này chắc chắn hoàn toàn không phải việc dễ. Cảm giác như đang mở chiếc hộp Pandora vậy. Đủ loại bug đồng bộ hóa vốn ẩn náu bấy lâu nay có khả năng sẽ bùng phát. Mà lại còn chỉ nổ ra ở runtime rất hiếm khi. Những vấn đề từng khiến việc phát triển multithreading đau đầu giờ có lẽ cũng sẽ bắt đầu thực sự bùng lên trong Python. Chỉ nhìn sang họ ngôn ngữ C thôi cũng thấy, những chỗ dùng hàm không thread-safe sẽ lập tức phát sinh vấn đề.

 
kissdesty 2025-05-21

Sẽ thật tuyệt nếu có một Agent tự động port và chạy kiểm thử!

 
darjeeling 2025-05-21

Vì là vấn đề liên quan đến multi-thread nên sẽ không dễ đâu.

 
ilotoki0804 2025-05-21

Bạn có thể cài đặt dễ dàng từ deadsnakes hoặc bộ cài chính thức trên Windows hay macOS mà không cần tự build!

 
darjeeling 2025-05-20

Có khá nhiều lỗi chính tả. hu hu Tôi không thể cập nhật ở đây nên đã cập nhật trên blog rồi.

 
jasonroh 2025-05-21

Xin chào, tôi liên hệ vì bài này hiện lên theo gợi ý của Google. Tôi đã làm phát triển Python ở nước ngoài 5 năm (tổng cộng 13 năm phát triển phần mềm nói chung), và hiện giờ đang tạm nghỉ một thời gian ở Hàn Quốc. Tôi muốn đóng góp... nếu được, bạn có thể cho tôi xin email không? Tôi muốn liên hệ và tìm hiểu thêm về việc này.

 
jasonroh 2025-05-21

Email của tôi là josephroh@naver.com. Xin cảm ơn.

 
darjeeling 2025-05-23

Tôi đã gửi email. Cảm ơn.