İlk olarak, bazı açıklamalar: Python bir dildir. Python dilinde yazılmış kodu çalıştırabilen birkaç farklı tercüman vardır. Referans uygulama (CPython) genellikle birisi bir uygulama gibi "Python" dan bahsettiğinde atıfta bulunulan şeydir, ancak uygulamalar arasında çılgınca farklılık gösterebileceğinden performans özellikleri hakkında konuşurken kesin olmak önemlidir.
İçsel uygulaması doğrudan etkilediğinden, SRP'yi Python'daki performanstan ödün vermeden nasıl ve nerede kucaklayabiliriz?
Durum 1.)
Sadece Python modüllerine dayanan saf Python kodunuz (<= Python Language sürüm 3.5, 3.6 "beta seviyesi desteği" vardır), SRP'yi her yerde kucaklayabilir ve çalıştırmak için PyPy kullanabilirsiniz. PyPy ( https://morepypy.blogspot.com/2019/03/pypy-v71-released-now-uses-utf-8.html ) Tam Zamanında Derleyici (JIT) içeren ve işlevi kaldırabilen bir Python yorumlayıcısıdır yürütülen kodu (birkaç saniye IIRC) izleyerek "ısınmak" için yeterli zaman olduğu sürece tepegöz çağırın. **
CPython yorumlayıcısını kullanmakla kısıtlıysanız, yavaş işlevleri C'de yazılmış uzantılara ayıklayabilirsiniz, bunlar önceden derlenecek ve herhangi bir tercüman yükü ile karşılaşmayacaktır. Yine de SRP'yi her yerde kullanabilirsiniz, ancak kodunuzun Python ve C arasında bölünmesi gerekir. Şüphesiz, CPython tarafından yorumlanan en iyileştirilmiş saf Python kodundan bile daha hızlı olacaktır. Python'un en hızlı matematiksel kütüphanelerinin çoğu bu yöntemi kullanır (numpy ve scipy IIRC). Hangi Durum 2 güzel bir segue olduğunu ...
Durum 2.)
C uzantıları kullanan (veya C uzantıları kullanan kitaplıklara dayanan ) Python kodunuz varsa, PyPy nasıl yazıldıklarına bağlı olarak yararlı olabilir veya olmayabilir. Ayrıntılar için http://doc.pypy.org/tr/latest/extending.html adresine bakın, ancak özet, CTypes daha yavaşken CFFI'nin minimum ek yüke sahip olmasıdır (PyPy ile kullanmak CPython'dan daha yavaş olabilir)
Cython ( https://cython.org/ ) bu kadar deneyimim olmayan başka bir seçenektir. Tamlık uğruna bundan bahsediyorum, böylece cevabım "kendi başına durabilir", ancak herhangi bir uzmanlık talep etmeyin. Sınırlı kullanımımdan, PyPy ile "ücretsiz" alabileceğim aynı hız iyileştirmelerini elde etmek için daha fazla çalışmak zorunda kaldım ve PyPy'den daha iyi bir şeye ihtiyacım olursa, kendi C uzantımı yazmak kadar kolaydı ( kodu başka bir yerde yeniden kullanırsam veya bir kısmını bir kütüphaneye çıkarırsam, tüm kodlarım hala herhangi bir Python Tercümanı altında çalışabilir ve Cython tarafından çalıştırılması gerekmez).
Pypy için yazılmış herhangi bir kod CPython altında da çalışabilir iken, Cython "kilitli" olmaktan korkuyorum.
** Üretimde PyPy hakkında bazı ekstra notlar
Büyük bir kod tabanında PyPy'ye "sizi kilitlemek" gibi pratik bir etkiye sahip olan seçimleri yaparken çok dikkatli olun. Bazı (çok popüler ve yararlı) üçüncü parti kütüphaneler daha önce belirtilen nedenlerle iyi oynamadıkları için, daha sonra bu kütüphanelerden birine ihtiyacınız olduğunu fark ederseniz çok zor kararlara neden olabilir. Deneyimim öncelikle, üretim ortamımıza ihmal edilebilir bir karmaşıklık eklediği bir şirket ortamında performansa duyarlı bazı (ancak hepsi değil) mikro hizmetlerin hızlandırılması için PyPy'yi kullanmaktır (zaten 2.7 vs gibi farklı ana sürümleri olan birden fazla dil konuşlandırılmıştır. 3.5 zaten çalışıyor).
Hem PyPy hem de CPython kullanmanın düzenli olarak beni her zaman değişikliğe tabi olan uygulama ayrıntılarına değil, yalnızca dil spesifikasyonunun kendisi tarafından yapılan garantilere dayanan bir kod yazmaya zorladığını gördüm. Bu tür ayrıntıların fazladan bir yük olduğunu düşünebilirsiniz, ancak bunu profesyonel gelişimimde değerli buldum ve bence Python ekosistemi için bir bütün olarak "sağlıklı".