Sekarang adalah waktu yang tepat untuk berkontribusi pada Free Threading Python
Di PyCon US 2025, saya ingin merangkum secara singkat apa yang saya pahami sejauh ini tentang Free Threading Python dan juga membahas cara berkontribusi.
Apa itu Free Threading Python?
Free Threading Python adalah proyek yang bertujuan menghapus GIL (Global Interpreter Lock) dari Python untuk meningkatkan performa di lingkungan multithread. Proyek ini dimulai untuk memperbaiki performa multithreading Python dan memberikan kinerja yang lebih baik pada pekerjaan yang CPU-bound.
Saat ini masih berada pada tahap eksperimental, dan Anda perlu memasang ulang hasil kompilasi atau menginstalnya melalui uv.
Situasi saat ini
Saya sendiri baru sebatas mengujinya, tetapi katanya sebagian besar library Python murni tidak bermasalah untuk digunakan. Namun, banyak library yang umum dipakai menggunakan library C/C++ atau diimplementasikan langsung sebagai extension karena alasan performa atau implementasi, sehingga library semacam ini memerlukan beberapa pendekatan berbeda agar bisa digunakan di Free Threading Python.
Jika menggunakan extension module
Sebagian besar menggunakan metode berikut, dan tersedia panduan porting.
- C API
- Cython
- PyBind11
- nanonbind
- PyO3
- f2py
CFFI belum didukung, tetapi dukungan dimungkinkan dengan menggunakan fork dari Quansight.
Ada issue yang menyatakan tidak akan mendukungnya, tetapi keputusan itu bisa dipahami karena CFFI kebanyakan digunakan untuk interfacing. Jika menggunakan CFFI yang sudah di-fork, Anda bisa memakai Free Threading Python, tetapi karena implementasinya tampaknya tidak terlalu mendetail, performanya kemungkinan akan menurun.
Cara berkontribusi
Mulai dari sini rasanya seperti melemparkan diri ke lubang yang dalam, tetapi saat saya ikut sprint, semua orang cukup positif, jadi menurut saya sekarang masih merupakan waktu yang baik untuk berkontribusi. Cara berkontribusinya adalah sebagai berikut.
Rujuk berikut ini untuk memeriksa apakah kompatibilitas dengan free-threading-python sudah baik
- Free-threaded Python Library Compatibility Checker
- 🧵 Free-Threaded Wheels
- Compatibility Status Tracking#
Setelah pengujian, daftarkan issue
Pasang dulu Python 3.13 free-threading, lalu instal library yang ingin diuji dan jalankan tesnya.
Kalau memungkinkan, bagus juga mencoba versi 3.14t, tetapi karena masih beta, sebaiknya mulai dari versi 3.13 terlebih dahulu.
Lakukan porting lalu kirim PR
Mulai dari sini sedikit lebih sulit. Anda perlu punya pemahaman tertentu tentang multithread, berbagai system call, serta bagian internal C/C++ dan Python.
Bagian tersulitnya adalah banyak library saling bergantung satu sama lain. Jika library yang dipakai oleh library tersebut masih belum mendukungnya, maka Anda harus mulai dari sana.
Saya sendiri saat ikut sprint baru sempat memetakan gambaran kasarnya, dan alurnya bisa seperti ini.
- fastapi -> uvicorn -> uvloop, cryptography, pycares
Tulis artikel tentang cara berkontribusi
Saya sedang melakukannya sekarang, tetapi tentu masih kurang. Mari menulis dan mempostingnya di berbagai tempat.
Tulis panduan penggunaan free-threading-python
Karena masih sedikit tulisan dalam bahasa Korea, akan baik jika melakukan tes performa, menulis cara penggunaannya, merapikannya, lalu mempublikasikannya sebagai artikel.
Mengapa harus berkontribusi sekarang
Saya rasanya sudah berada di ekosistem open source selama lebih dari sekitar 25 tahun. Saya bukan kontributor open source yang hebat, tetapi banyak kenalan saya yang berkontribusi besar, termasuk dua orang CPython Core Developer dan banyak lainnya. Karena itu, dari percakapan dengan mereka saya punya semacam firasat.
Waktu terbaik untuk berkontribusi adalah ketika belum ada apa-apa, atau ketika sedang terjadi perubahan besar. Misalnya, pada masa awal Python, Jang Hye berkontribusi pada banyak hal, tetapi juga pada unicode dan codec Hangul. Saat itu belum ada apa-apa, dan para kontributor utama kemungkinan besar tidak memahami codec Hangul, jadi saya rasa akses untuk mulai berkontribusi relatif lebih mudah. Perubahan besar berikutnya adalah saat transisi ke python3. Setelah itu ada sisi asyncio; yang paling saya ingat adalah Kim Jun-gi, meskipun tentu ada banyak orang lain juga. Dan sekarang, fitur baru free-threading telah hadir. Saya pikir sekarang adalah waktu terbaik untuk berkontribusi.
Dalam bahasa lain, perubahan biasanya diputuskan oleh perusahaan atau dibuat dalam framework yang sudah dikelola perusahaan besar, sehingga tidak mudah. Tentu Python juga bukan sesuatu yang sangat mudah diakses, tetapi karena ada begitu banyak library dan framework, dan sekarang semuanya bisa di-port satu per satu serta membutuhkan banyak tenaga, inilah saatnya.
12 komentar
Salah satu alasan Python begitu populer adalah karena sebelumnya tidak perlu memikirkan hal-hal seperti multithreading sampai sejauh ini. Kalau sampai harus mempertimbangkan hal seperti itu juga, bahasa ini akan menjadi bahasa yang tidak mudah lagi digunakan oleh orang awam.
Ini masih fitur opsional, dan kemungkinan besar multithreading akan tetap menjadi opsi. (misalnya dengan mengaktifkan opsinya atau instalasi terpisah, dan sebagainya)
Saya juga jarang memakai Type, dan sepertinya saya akan memakai free-threading karena isu performa, tetapi kemungkinan penggunaannya akan sangat terbatas.
Saya tidak menganggapnya sebagai hal yang opsional. Setelah PEP 779 disetujui, tujuannya adalah mengubah implementasi default di masa depan menjadi free-threaded.
Maksud saya kira-kira sekadar bahwa mungkin bisa dipakai tanpa terlalu dipikirkan seperti
type. Hehe.free threading Python ini jelas sama sekali bukan pekerjaan yang mudah. Rasanya seperti membuka kotak Pandora. Ada kemungkinan berbagai bug sinkronisasi yang selama ini tersembunyi akan bermunculan. Apalagi bug seperti itu kadang hanya meledak saat runtime. Masalah-masalah yang dulu bikin pusing saat pengembangan multithreading sekarang bisa jadi akan benar-benar mulai muncul juga di Python. Bahkan kalau melihat keluarga C saja, penggunaan fungsi yang tidak thread-safe akan langsung menimbulkan masalah.
Akan bagus kalau ada Agent yang bisa melakukan porting dan pengujian secara otomatis!
Karena ini masalah multi-thread, sepertinya tidak akan mudah.
Bahkan tanpa perlu build sendiri, ini bisa diinstal dengan mudah lewat deadsnakes maupun installer resmi Windows dan macOS!
Ada banyak salah ketik. T_T Saya tidak bisa memperbarui di sini, jadi saya sudah memperbaruinya di blog.
Halo, saya menghubungi Anda karena tulisan ini muncul di rekomendasi Google. Saya telah bekerja sebagai developer Python selama 5 tahun di luar negeri (13 tahun dalam pengembangan secara umum), dan sekarang sedang beristirahat sejenak di Korea. Saya ingin berkontribusi... bolehkah saya meminta alamat email Anda? Saya ingin menghubungi Anda dan belajar tentang hal ini.
Email saya adalah josephroh@naver.com. Terima kasih.
Saya sudah mengirim email. Terima kasih.