Python 3.15'te free-threaded build, CPython'in GIL devre dışı çalışabilen ayrı bir derlemesidir. İş parçacıklarının aynı süreç içinde Python kodunu birden çok CPU çekirdeğinde paralel yürütmesine imkân tanıyabilir. Ancak bu, her projeyi otomatik hızlandıran bir seçenek değildir; sonuç, işin CPU ağırlıklı olup olmamasına, kodun ortak veriyi nasıl yönettiğine ve kütüphanelerin uyumluluğuna bağlıdır.
27 Eylül 2026 itibarıyla Python 3.15, resmî sürüm durumunda prerelease olarak listeleniyor ve 3.15 belgeleri 3.15.0rc2 sürüm adını taşıyor.
Free-threaded build GIL açısından neyi değiştirir?
GIL'i, CPython yorumlayıcısının Python nesneleri üzerinde işlem yaparken kullandığı küresel kilit olarak düşünebilirsin. GIL etkin bir derlemede aynı anda yalnızca GIL'i tutan iş parçacığı Python kodunu ve Python C API'sini çalıştırabilir. Diğer iş parçıkları tamamen durmaz, yorumlayıcı zaman zaman aralarında geçiş yapar. Bu nedenle birkaç iş parçacığı oluşturmak, CPU ağırlıklı saf Python kodunun otomatik olarak birden çok çekirdekte gerçek paralellikte yürüdüğü anlamına gelmez.
Free-threaded build, GIL'in devre dışı olduğu bir yürütme modeli sunar. Uygun biçimde ayrılmış görevlerde aynı süreçteki iş parçacıkları Python kodunu aynı anda çalıştırabilir. Buradaki temel değişiklik doğrudan bir hız düğmesi değildir. Build, tek bir uzun fonksiyonu kendiliğinden parçalara ayırmaz; görevleri bölme, paylaşılan durumu koruma ve iş parçacıkları arasındaki koordinasyonu tasarlama sorumluluğu programcıdadır.
Dağıtım tarafında bu yapı, normal Python kurulumundaki basit bir ayar değil, ayrı bir çalışma biçimidir. Python 3.15 belgeleri, macOS ve Windows için resmî yükleyicilerin free-threaded Python ikili dosyalarını isteğe bağlı olarak kurmayı desteklediğini, kaynak koddan derlemede ise --disable-gil seçeneğinin kullanıldığını belirtiyor.
Etkinleşme noktasında iki şeyi ayırmak gerekir: Derlemenin free-threading desteğine sahip olması ve çalışan süreçte GIL'in gerçekten kapalı bulunması. Free-threaded build, GIL'i çalışma zamanında PYTHON_GIL ortam değişkeni veya -X gil komut satırı seçeneğiyle yeniden etkinleştirebilir. Ayrıca free-threaded uyumluluğu belirtilmemiş bir C API uzantısı yüklenirken GIL otomatik olarak açılabilir. Bu nedenle free-threaded bir Python kurulmuş olsa bile her çalışmanın GIL'siz yürütüleceği varsayılmaz.
Uyumluluk bu yüzden teknik bir ayrıntıdan fazlasıdır. GIL devre dışı olsa bile ortak sözlük, liste veya başka değişebilir verilere erişimde uygulama düzeyindeki yarış durumları kendiliğinden çözülmez. Python belgeleri, yerleşik türlerin iç kilitlerine güvenmek yerine gerektiğinde threading.Lock gibi senkronizasyon araçlarının kullanılmasını öneriyor.
İş parçacığı ve süreç CPU ağırlıklı işlerde nasıl ayrılır?

İş parçacığı, aynı süreç içindeki daha küçük bir yürütme birimidir ve thread'ler aynı bellek alanını paylaşır. Bu paylaşım, ortak veriye erişimi doğrudanlaştırır; fakat aynı verinin eşzamanlı değiştirilmesi için kilit, kuyruk veya başka koordinasyon mekanizmaları gerekebilir. İş parçacıkları, dosya işlemleri ve ağ istekleri gibi beklemenin önemli olduğu I/O ağırlıklı işlerde de kullanılabilir.
GIL etkin bir build'de CPU ağırlıklı saf Python işinde iş parçacığı sayısını artırmak, Python bytecode yürütmesini birden çok çekirdeğe yaymaz. Free-threaded build bu sınırlamayı kaldırma potansiyeli taşır; ancak görevlerin nasıl bölündüğü, iş parçacıklarının ortak duruma ne sıklıkla eriştiği ve kullanılan kütüphanelerin davranışı sonucu etkiler.
Süreç yaklaşımında her worker ayrı bir süreç olarak çalışır. multiprocessing, thread yerine alt süreçler kullanarak GIL'i aşar ve birden çok işlemciden yararlanabilir. Buna karşılık süreçler arası verinin aynı nesne olarak paylaşılmadığını hesaba katmak gerekir. Örneğin süreçler arası kuyruklarda nesneler serileştirilir ve karşı tarafta yeniden oluşturulur. Bu nedenle CPU ağırlıklı bağımsız parçalar için süreçler anlamlı bir seçenek olabilirken, veri aktarımı ve süreçler arasındaki iletişim ayrıca tasarlanır.
Sonuç olarak CPU ağırlıklı işlerde süreçler ile free-threaded iş parçacıkları, I/O ağırlıklı işlerdeki klasik threading kullanımından farklı bir problem çözer. Bir yöntemin diğerinin otomatik alternatifi sayılmamasının nedeni, paralellik kadar veri paylaşımı ve koordinasyon biçiminin de çalışma sonucunu etkilemesidir.
Kısa bir CPU örneğiyle ne ölçülebilir?

Free-threaded build'in etkisini görmek için aynı saf Python hesabını iki parçaya ayırıp önce sırayla, sonra iki iş parçacığıyla çalıştırabilirsin. Aşağıdaki örnek, Python 3.15'in CPython yorumlayıcısında sys.abi_info.free_threaded ile build'in free-threaded desteğini, sys._is_gil_enabled() ile GIL'in çalışma anında etkin olup olmadığını gösterir. Bu iki bilgiyi ayırmak önemlidir, çünkü free-threaded desteği bulunan bir build içinde GIL farklı bir nedenle yeniden etkinleşebilir.
import sys
import time
from concurrent.futures import ThreadPoolExecutor
N = 2_000_000
chunks = ((0, N // 2), (N // 2, N))
def work(start, stop):
return sum(i * i for i in range(start, stop))
t0 = time.perf_counter()
sequential = work(*chunks[0]) + work(*chunks[1])
sequential_time = time.perf_counter() - t0
t0 = time.perf_counter()
with ThreadPoolExecutor(max_workers=2) as pool:
futures = [pool.submit(work, *chunk) for chunk in chunks]
threaded = sum(future.result() for future in futures)
threaded_time = time.perf_counter() - t0
print("Yorumlayıcı:", sys.version.split()[0])
print("Free-threaded build:", sys.abi_info.free_threaded)
print("GIL etkin:", sys._is_gil_enabled())
print("Sonuçlar eşit:", sequential == threaded)
print(f"Sıralı süre: {sequential_time:.3f} saniye")
print(f"İki iş parçacığı süre: {threaded_time:.3f} saniye")
Beklenen temel sonuç Sonuçlar eşit: True satırıdır. Bu satır, iki çalışma biçiminin aynı aralıkları hesaplayıp aynı toplamı ürettiğini gösterir. Süreler için sabit bir değer beklenmez; işlemci, arka plan yükü, yorumlayıcının build durumu ve çalıştırma koşulları sonucu değiştirebilir.
Tek çalıştırmada iki iş parçacığıyla alınan sürenin daha kısa çıkması, kesin bir performans sonucu değildir. Aynı şekilde, iki iş parçacığı oluşturulması görevlerin CPU üzerinde etkili biçimde paralel ilerlediğini tek başına kanıtlamaz. Bu örneği bir teşhis başlangıcı olarak kullanıp sonuç eşitliğini, GIL durumunu ve tekrarlanan süreleri birlikte değerlendirmek gerekir.
Free-threaded build projen için uygun mu? Dört karar ölçütü
Free-threaded build bir hız düğmesi değildir; projenin iş yükü, kullandığın kütüphaneler ve uyumluluk durumu birlikte değerlendirilmelidir. Kararı şu dört ölçütle sınırlandırmak, “daha hızlı olur mu?” sorusunu ölçülebilir hâle getirir.
1. Öğrenme önceliğin Python temelleri mi?
Değerlendirmeye değişkenler, koşullar, döngüler, fonksiyonlar, veri yapıları, hata yönetimi ve modüller gibi temel konuların projendeki yerinden başla. Bu konular hâlâ çalışma alanındaysa free-threaded build'i ana öğrenme hedefi değil, daha sonra incelenecek bir çalışma modeli olarak konumlandırmak daha anlaşılır olabilir. Genel Python temellerini gözden geçirmek için Python bilgi testi kullanılabilir; bu test free-threaded özelliğini değil, genel Python bilgisine dair bir kontrol sunar.
2. Projenin işi CPU ağırlıklı mı, I/O ağırlıklı mı?
Saf Python döngüleri, yoğun hesaplamalar ve birbirinden ayrılabilen görevler CPU ağırlıklı bir deneme alanı oluşturur. Dosya, ağ veya başka bir dış kaynaktan yanıt bekleyen işlerde ise darboğaz bekleme olabilir. Önce projenin zamanını nerede harcadığını belirle, sonra iş parçacığıyla paralellik iddiasını test et. Free-threaded build'in etkisi, CPU işi gerçekten baskın olduğunda ve görevler güvenli biçimde bölünebildiğinde daha anlamlı bir ölçüm sorusuna dönüşebilir.
3. Kullandığın kütüphaneler free-threaded yapıyla uyumlu mu?
Bağımlılıkları yalnızca Python kodunun çalışıp çalışmadığına göre değerlendirme. Özellikle C API uzantısı içeren paketlerin free-threaded build desteği ayrıca belirtilmiş olmalı. Desteklenmeyen bir uzantı içe aktarılırken GIL yeniden etkinleşebilir; bu durumda kendi iş parçacığı tasarımın doğru olsa bile ölçtüğün çalışma modeli değişir. Paket belgelerini ve kullandığın derlemeyi birlikte kontrol et.
4. Aynı sonucu tekrarlanabilir biçimde ölçebilir misin?
Aynı girdiyi, görev bölme biçimini, iş parçacığı sayısını ve yorumlayıcı durumunu koru. Tek çalıştırma yerine birkaç tekrar yap, ilk çalıştırmayı ayrı not et ve bilgisayarın arka plan yükünü mümkün olduğunca sabit tut. Sonuçlar her denemede değişebileceği için tek bir süreyi genelleme; karşılaştırmada tekrarların ortak yönüne bak. Bu ölçüt karşılanmıyorsa build seçimi yerine önce ölçüm düzenini iyileştirmek gerekir.
Öğrenme planına almadan önce neleri kontrol etmelisin?
Free-threaded build konusunu çalışma planına eklemeden önce, bunun projen için gerçekten anlamlı olup olmadığını dört somut adımla değerlendirebilirsin. Temel Python konularını düzenli sırayla ilerletmek ve ödevleri seviyene göre yapılandırmak için birebir Python dersleri kapsamında kişiye özel bir öğrenme planı oluşturulabilir.
- Temel Python bilgini yokla. Kısa bir Python bilgi testi çöz, yanlış yaptığın soruları değişkenler, fonksiyonlar, veri yapıları, hata yönetimi ve sınıflar gibi konu başlıklarına ayır. Eksik ön koşulları tamamlamadan paralel çalışma modellerine geçme.
- Gerçek iş yükünü tanımla. Ölçmek istediğin görevi proje içinden seç ve girdinin boyutunu, beklenen çıktıyı, kabul edilebilir süreyi ve işlemin CPU ağırlıklı olup olmadığını yazılı hâle getir. Sadece yapay bir döngü yerine gerçek kullanım senaryosunu temel al.
- Bağımlılıkları resmî belgelerden kontrol et. Kullandığın kütüphanelerin resmî dokümantasyonunda free-threaded çalışma biçimiyle uyumluluk, derleme gereksinimleri ve bilinen sınırlamalar hakkında bilgi ara. Açıkça belirtilmeyen noktaları destekleniyor kabul etme.
- Aynı işi karşılaştırılabilir koşullarda birden çok kez ölç. Aynı girdileri, aynı donanımı ve aynı çalışma ayarlarını kullanarak ölçümü tekrarla. Tek bir en iyi sonucu değil, elde edilen sürelerin genel eğilimini karşılaştır ve kullandığın ölçüm yöntemini kaydet.
Bu kontrol listesi, free-threaded build'i yalnızca yeni bir seçenek olarak değil, temel bilgiler, bağımlılıklar ve ölçülebilir proje ihtiyacıyla birlikte değerlendirmeni sağlar.