Python sinyal işleyicilerinde print kullanımı istisnaya yol açabiliyor
Öne çıkanlar
- CPython, Python düzeyindeki sinyal işleyicilerini yorumlayıcı tutarlı duruma gelene kadar erteliyor.
- Hızlı gelen sinyaller, çalışan bir sinyal işleyicisinin ortasında yeniden çağrı başlatabiliyor.
- Standart çıktı tamponu üst üste binen çağrılarda RuntimeError istisnası üretiyor.
Python geliştiricisi Ian Fisher, CPython ortamında sinyal işleyicileri içinde standart print fonksiyonunu çalıştırmanın sınırlarını test etti. C dilindeki katı sinyal güvenliği kısıtlamalarının aksine CPython, kullanıcı tanımlı sinyal işleyicilerini düşük seviyeli C sinyal işleyicisi içinde doğrudan çalıştırmıyor; yorumlayıcının tutarlı bir duruma gelmesini bekleyerek erteliyor. Ancak Python sinyal işleyicileri yeniden girişli (reentrant) yapıda çalıştığı için işlem devam ederken gelen yeni sinyaller mevcut işleyicinin kesilmesine neden oluyor.
Yapılan stres testinde, bir sürece ardı ardına 50 adet SIGUSR1 sinyali gönderildiğinde print çağrısının kesintiye uğradığı ve yorumlayıcının RuntimeError istisnası fırlattığı gözlemlendi. Bu hata, Python'ın standart çıktı tamponu olan BufferedWriter nesnesinin aynı anda birden fazla kez çağrılmasından kaynaklanıyor. Yazar, bu durumun uç senaryolarda ortaya çıktığını ve C dilindeki bellek bozulmaları ya da kilitlenmelere kıyasla kontrollü bir çökme sağladığını belirtiyor.
Bu özet yapay zekâ ile hazırlanmıştır; ayrıntılar ve doğrulama için orijinal kaynağa başvurun.