Free-Threaded Python'un İlk 1 Yılına Bakış
(labs.quansight.org)- Free-threaded Python, çok çekirdekli donanımı verimli kullanabilmek için tasarlanmıştır
- CPython 3.14 ile çekirdek modüllerde thread safety ve performans önemli ölçüde iyileştirildi
- Hâlâ free-threaded build'i desteklemeyen birçok önemli paket bulunuyor
- Herkes, gerçek kullanım ortamlarından gelen raporlar ve topluluk katkıları ile gelişime katılabilir
Genel Bakış
Geçen hafta CPython 3.14.0b1 yayımlandı ve bu hafta PyCon 2025 Pittsburgh'da başlıyor.
Bu iki etkinlik, free-threaded Python'ın dağıtımı ve kararlılığa kavuşması açısından önemli dönüm noktalarıdır.
Bu yazı, son bir yıldaki süreci geriye dönük inceliyor ve Quansight ekibinin karmaşık bağımlılıklara sahip gerçek üretim iş akışlarında free-threaded build'i deneysel olarak uygulamada nasıl kilit bir rol oynadığını açıklıyor.
Free-Threaded Python Ne Anlama Geliyor ve Neden Gerekli?
- Free-threaded Python desteği, çok çekirdekli CPU ve GPU'ların yaygınlaştığı modern donanımın toplam hesaplama kaynaklarının tamamını kullanmayı mümkün kılar
- Mevcut GIL (Global Interpreter Lock) yaklaşımında, paralel algoritmaları tam olarak kullanabilmek için dolambaçlı yöntemler ve ek ayarlamalar gerekiyordu
- Genellikle threading modülü yerine multiprocessing kullanılıyordu; ancak bunun süreç oluşturma maliyeti yüksektir ve veri kopyalama da verimsizdir
- Python paketleri arasında native kod içerenlerde, free-threaded build doğrudan uyumlu olmadığından thread safety garantisi için kod denetimi mutlaka yapılmalıdır
- GIL'in kaldırılması, CPython yorumlayıcısında derin yapısal değişiklikler gerektirdi ve mevcut paketlerdeki yapısal sorunları da görünür hâle getirdi
Başlıca Kazanımlar
- Meta'nın Python runtime ekibi ile birlikte, aşağıdaki gibi çeşitli paket ve projelere free-threaded Python desteği kazandırıldı
- meson, meson-python, setup-python GitHub Actions, packaging, pip, setuptools gibi paketleme ve iş akışı araçları
- Cython, pybind11, f2py, PyO3 gibi binding üreticileri
- NumPy, SciPy, PyArrow, Matplotlib, pandas, scikit-learn, scikit-image gibi PyData ekosisteminin temel paketleri
- Pillow, PyYAML, yarl, multidict, frozenlist gibi PyPI'de en çok indirilen başlıca bağımlılıklar
- Henüz desteklenmeyen popüler paketler (CFFI, cryptography, PyNaCl, aiohttp, SQLAlchemy, grpcio vb.) ile makine öğrenimi kütüphaneleri (safetensors, tokenizers vb.) üzerinde de kademeli olarak çalışılıyor
- Quansight ekibindeki CPython çekirdek geliştiricileri, 3.14 sürümüne şu iyileştirmeleri dahil etti
- warnings modülü, free-threaded build'de varsayılan olarak thread-safe çalışıyor
- asyncio içindeki ciddi thread safety sorunları iyileştirildi ve paralel ölçeklenebilirlik artırıldı
- ctypes modülünde thread safety baştan sona iyileştirildi
- Free-threaded garbage collector performansı artırıldı
- deferred reference counting şeması ve adaptive specializing interpreter için optimizasyonlar yapıldı
- Çok sayıda bug fix ve thread safety iyileştirmesi gerçekleştirildi
- Free-threaded Python desteği için kapsamlı bir rehber1 de hazırlanarak, bundan sonra daha fazla paketin pratikte yararlanabileceği dokümantasyon sağlandı
Free-Threaded Python Ekosisteminin Durumu
- Bir yıl önce (3.13.0b1 yayımlandığında), free-threaded build'de çoğu Python paketinin kurulumu tam anlamıyla bozulmuş durumdaydı
- Build hatalarının nedeni temel tasarım sorunlarından çok, desteklenmeyen varsayılan seçenekler ya da küçük varsayımların geçersiz hâle gelmesiydi
- Son bir yılda toplulukla birlikte birçok sorun çözüldü; özellikle Cython 3.1.0'ın resmî destek kazanması büyük bir dönüm noktası oldu
- Hâlâ derlenmiş kod içermesine rağmen free-threaded wheel sunmayan paketler bulunuyor
Bunların ilerleme durumu manuel ve otomatik takip tablolarında2 görülebilir
Önümüzdeki Zorluklar
- Şu anda free-threaded Python build'i, gerçek iş akışlarında deney ve geri bildirim gerektiren bir aşamadadır
- Özellikle multiprocessing kullanım maliyetinin yüksek olduğu iş akışlarında performans iyileştirmesi potansiyeli var; ancak her paket için ayrıntılı thread safety denetimi zorunludur
- Pek çok kütüphane mutable veri yapıları sunmasına rağmen thread safety dokümantasyonu veya gerçek güvence açısından yetersiz kalıyor
- Paket büyükse ve çok fazla legacy barındırıyorsa, kodu bütünüyle anlayabilen kişi sayısının azlığı nedeniyle destek gecikebiliyor
- Topluluk düzeyinde, temel paket bakımının sürdürülebilirliği için çaba gösterilmesi gerekiyor
Nasıl Katkı Sağlanır?
- Resmî rehberdeki katkı kılavuzuna başvurabilirsiniz
- Ekosistem genelindeki sorunları izleme ve başlıca uyumluluk belgeleri free-threaded-compatibility deposunda5 yönetiliyor
- Quansight-Labs tarafından yürütülen topluluk Discord6 üzerinden tartışmalara katılabilir ve katkı sunabilirsiniz
PyCon Sunumu Duyurusu
- Yazının yazarı ve ekip üyesi Lysandros Nikolaou, PyCon 2025'te bir sunum yapacak
- Deneyimlerden çıkan pratik port etme örnekleri ve ipuçları paylaşılacak; ayrıca YouTube kayıt videosu da sunulacak
- Free-threaded build'in Python dilinin geleceği olduğuna inanılıyor ve bunu gerçeğe dönüştürmeye katkı sunabilmek büyük heyecan yaratıyor
- Bugün yapılan çalışmaların, her gün milyonlarca geliştiricinin kullandığı geniş ve çeşitli paketlerin geleceğini açan bir dönüm noktası olması umuluyor
1 yorum
Hacker News yorumları
Birçok kişi multiprocessing kullanıyor ve süreç oluşturma maliyetinin pahalı olduğuna dikkat çekiyor
SharedMemory özelliği varken bunun neden daha sık kullanılmadığını anlamadığını söylüyor
ShareableList ile deneyiminin iyi olduğunu özellikle vurguluyor
Unix'te süreç oluşturma hızı 1 ms'nin altında
PYTHONyorumlayıcı sürecini başlatmak, import sayısına göre 30 ms ile 300 ms sürebiliyorsqlite.org'un da istek başına ayrı süreç yaklaşımını kullandığı örneği paylaşılıyorShareableList yalnızca atomik skalerleri ve bytes·string değerlerini paylaşabiliyor
pickle dumpgibi serileştirme maliyeti ve süreç başına kopyalanan bellek maliyeti ortaya çıkıyornumpydizilerini paylaşmada büyük başarı yaşadığını anlatıyorsegfault'ları debug etmenin artmasından endişe ediyorSüreçler bağımsız biçimde öldüğü için, lock tutarken paylaşımlı bellek veri yapısını değiştiren bir süreç ölürse toparlamanın zor olduğuna dikkat çekiyor
Paylaşımlı bellek yalnızca özel donanım üzerinde çalışıyor
forktabanlı süreç kopyalama da ayrı bir sorunGIL'in kaldırılmasının Python çoklu thread kodu üzerinde paralel işlem dışında başka etkileri olup olmadığını merak ediyor
GIL'in korunma nedeninin çoklu thread'lerin GIL'e bağımlı olması değil; GIL'i kaldırmanın yorumlayıcı uygulamasını ve C eklentilerini zorlaştırması ve tek thread kodunu yavaşlatması olduğunu anladığını söylüyor
Free-threaded Python'ın, bytecode sınırlarında her an kesilebilme yönündeki mevcut garantiyle aynı olup olmadığını soruyor
Yoksa daha fazla lock kullanmak gibi yazım biçimlerinin değişip değişmeyeceğini merak ediyor
Free-threaded Python da büyük ölçüde aynı garantileri sunuyor
numpyekibinin sub-interpreter desteği veremeyeceklerini açıkça söylediğini belirtiyornumpyzaten free-threading desteğine sahip, kalan bug'lar düzeltiliyorÇok çekirdek kullanımı mümkün, ancak thread başına performans düşüşü ve kütüphanelerin yeniden elden geçirilmesi gerekiyor
Race condition'lar daha sık yaşanabileceği için, güvenilirlik sağlamak adına çoklu thread Python yazarken daha dikkatli olunması gerekiyor
Microsoft'un Faster Python ekibini dağıttığı haberi paylaşılıyor
Bunun, 2025 için beklenen performans hedeflerinin tutmaması nedeniyle ekibin korunamamasıyla ilgili olduğu söyleniyor
Bundan sonra CPython'a performans iyileştirmeleri gelip gelmeyeceğini ya da başka şirketlerin destek verip vermeyeceğini izleyeceğini belirtiyor
Facebook'un (Meta) hâlâ kısmi destek sağlıyor gibi göründüğünü ekliyor
Microsoft'un taahhütlerine kıyasla takvimin büyük ölçüde geciktiğine değiniliyor
Sonucun üzücü olduğunu ama Microsoft'un uzun vadeli taahhütlerine güvenmemesinin doğru çıktığını belirtiyor
Son dönemde Google'ın da tüm Python geliştirme ekibini işten çıkarmış gibi göründüğüne dair bir söylenti var
Çok üzücü olduğunu, ancak embrace & extend sonrasında geriye tek bir şey kaldığı imasında bulunuyor
Python'da GIL'in ortadan kalkmasından endişe eden tek kişinin kendisi olup olmadığını soruyor
Hangi dilde olursa olsun karmaşık çoklu thread koduna güvenmenin zor olduğunu, Python'da bunun dinamik yapı nedeniyle özellikle daha da tedirgin edici olduğunu düşünüyor
Değişimden korkan tek kişi olmadığını, fakat bu gerekçenin irrasyonel olabileceğini söylüyor
asynckullandığını belirtiyorKendisi
asyncioyu aktif biçimde kullandığını söylüyorML/AI alanında olduğu gibi, uzmanların önce karmaşık kütüphaneleri geliştirip genel kullanıcılara bunları sunduğu bir yapı bekliyor
Gereksiz bir korku yaymak olabilir ama LLM'lerin son on yıllardaki, GIL'in var olduğu varsayımıyla yazılmış Python kodlarıyla eğitildiğini hatırlatıyor
GIL'in olup olmaması yalnızca çok çekirdekli çalışma isteyenleri ilgilendiriyor
Python'ı sık kullandığını ama uzman olmadığını, bazen
concurrent.futuresile birkaç basit fonksiyonu aynı anda çalıştırdığını söylüyorBöyle kullanıcıların ileride neyi değiştirmesi gerekeceğini merak ediyor
Thread'ler artık GIL'e bağlı kalmayacağı için genel olarak daha hızlı olacak
Python ile 20 yıllık profesyonel geliştirme deneyiminden çıkardıklarını paylaşıyor
Thread'lere gerçekten ihtiyaç duyulan durumların, message passing'in kaçınılmaz olduğu senaryolarla sınırlı olduğunu düşünüyor
asyncprogramlama olduğunu ve mutlaka öğrenilmesini tavsiye ediyorPython'ı benzer süre kullandığını ve buna katıldığını, ama biraz farklı ifade edeceğini söylüyor
asynckullanımını güçlü biçimde öneriyor (glif, haklıydın!)Görsel yapay zekayla üretilmiş olabilir ama yılanın iki kuyruğu olması garip bulunuyor
Bunu sessizce geçiştirme yönünde esprili bir destek geliyor; Python haberinde yılan görseli varsa bunun genelde pek önemsenmeye değer bir işaret olmadığı söyleniyor
Şaka yollu olarak
Confusoborusadı öneriliyorBaşlık görselindeki yılanın iki kuyruğu var gibi göründüğü belirtiliyor
Kütüphane desteğinin dışında, WSGI ve Celery worker'larını tek süreçte çalıştırmanın başka kısıtları olup olmadığını soruyor
Bunun, önümüzdeki performans çağı için muazzam bir temel çalışması olduğunu düşünüyor