Đầu tiên, một số làm rõ: Python là một ngôn ngữ. Có một số trình thông dịch khác nhau có thể thực thi mã được viết bằng ngôn ngữ Python. Việc triển khai tham chiếu (CPython) thường là những gì đang được tham chiếu khi ai đó nói về "Python" như thể đó là một triển khai, nhưng điều quan trọng là phải chính xác khi nói về các đặc điểm hiệu suất, vì chúng có thể khác nhau giữa các triển khai.
Làm thế nào và ở đâu chúng ta nắm lấy SRP mà không ảnh hưởng đến hiệu suất trong Python, vì việc triển khai vốn có của nó ảnh hưởng trực tiếp đến nó?
Trường hợp 1.)
Nếu bạn có mã Python thuần (<= Ngôn ngữ Python phiên bản 3.5, 3.6 có "hỗ trợ mức beta") chỉ dựa trên các mô-đun Python thuần túy, bạn có thể sử dụng SRP ở mọi nơi và sử dụng PyPy để chạy nó. PyPy ( https://morepypy.blogspot.com/2019/03/pypy-v71-release-now-uses-utf-8.html ) là trình thông dịch Python có Trình biên dịch đúng thời gian (JIT) và có thể xóa chức năng gọi qua đầu miễn là nó có đủ thời gian để "làm nóng" bằng cách truy tìm mã được thực thi (một vài giây IIRC). **
Nếu bạn bị hạn chế sử dụng trình thông dịch CPython, bạn có thể trích xuất các hàm chậm thành các phần mở rộng được viết bằng C, sẽ được biên dịch trước và không phải chịu bất kỳ chi phí nào của trình thông dịch. Bạn vẫn có thể sử dụng SRP ở mọi nơi, nhưng mã của bạn sẽ được phân chia giữa Python và C. Việc này tốt hơn hay xấu hơn cho việc duy trì hơn là từ bỏ có chọn lọc SRP nhưng việc chỉ sử dụng mã Python phụ thuộc vào nhóm của bạn, nhưng nếu bạn có các phần quan trọng về hiệu suất của bạn mã, chắc chắn nó sẽ nhanh hơn cả mã Python thuần được tối ưu hóa nhất được CPython diễn giải. Nhiều thư viện toán học nhanh nhất của Python sử dụng phương pháp này (IIRC numpy và scipy). Đó là một sự khác biệt tốt đẹp trong Trường hợp 2 ...
Trường hợp 2.)
Nếu bạn có mã Python sử dụng tiện ích mở rộng C (hoặc dựa vào thư viện sử dụng tiện ích mở rộng C), PyPy có thể hoặc không hữu ích tùy thuộc vào cách chúng được viết. Xem http://doc.pypy.org/en/latest/extending.html để biết chi tiết, nhưng tóm tắt là CFFI có chi phí tối thiểu trong khi CTypes chậm hơn (sử dụng với PyPy thậm chí có thể chậm hơn CPython)
Cython ( https://cython.org/ ) là một tùy chọn khác mà tôi không có nhiều kinh nghiệm. Tôi đề cập đến nó vì mục đích hoàn chỉnh để câu trả lời của tôi có thể "tự đứng vững", nhưng không yêu cầu bất kỳ chuyên môn nào. Từ việc sử dụng hạn chế của tôi, tôi cảm thấy mình phải làm việc chăm chỉ hơn để có được những cải tiến tốc độ tương tự mà tôi có thể nhận được "miễn phí" với PyPy, và nếu tôi cần thứ gì đó tốt hơn PyPy, thì cũng dễ dàng viết phần mở rộng C của riêng tôi ( có lợi ích nếu tôi sử dụng lại mã ở nơi khác hoặc trích xuất một phần của nó vào thư viện, tất cả mã của tôi vẫn có thể chạy dưới bất kỳ Trình thông dịch Python nào và không bắt buộc phải chạy bởi Cython).
Tôi sợ bị "nhốt" vào Cython, trong khi bất kỳ mã nào được viết cho PyPy cũng có thể chạy theo CPython.
** Một số ghi chú thêm về PyPy trong sản xuất
Hãy cẩn thận về việc đưa ra bất kỳ lựa chọn nào có tác dụng thực tế là "nhốt bạn" vào PyPy trong một cơ sở mã lớn. Bởi vì một số thư viện bên thứ ba (rất phổ biến và hữu ích) không hoạt động tốt vì những lý do được đề cập trước đó, nó có thể gây ra những quyết định rất khó khăn sau này nếu bạn nhận ra rằng bạn cần một trong những thư viện đó. Kinh nghiệm của tôi chủ yếu là sử dụng PyPy để tăng tốc một số (nhưng không phải tất cả) các dịch vụ siêu nhỏ nhạy cảm với hiệu suất trong môi trường công ty, nơi nó tăng thêm độ phức tạp không đáng kể cho môi trường sản xuất của chúng tôi (chúng tôi đã triển khai nhiều ngôn ngữ, một số ngôn ngữ với các phiên bản chính khác nhau như 2.7 vs. 3.5 chạy dù sao).
Tôi đã phát hiện ra việc sử dụng cả PyPy và CPython thường xuyên buộc tôi phải viết mã chỉ dựa trên các bảo đảm được thực hiện bởi chính đặc tả ngôn ngữ và không dựa trên các chi tiết triển khai có thể thay đổi bất cứ lúc nào. Bạn có thể thấy suy nghĩ về những chi tiết như vậy là một gánh nặng thêm, nhưng tôi thấy nó có giá trị trong sự phát triển chuyên nghiệp của tôi và tôi nghĩ rằng nó là "lành mạnh" cho toàn bộ hệ sinh thái Python.