Python có trở nên nhanh hơn không?

Python là ngôn ngữ lập trình rất phổ biến (và ngày càng tăng), nhờ vai trò hàng đầu của nó trong các lĩnh vực như khoa học dữ liệu hoặc trí tuệ nhân tạo. Tuy nhiên, với việc mã hóa dễ dàng là một trong những mục tiêu sáng lập của nó, tốc độ là thứ đã bị bỏ quên trong suốt quá trình phát triển của nó.

Trên thực tế, các ngôn ngữ cấp thấp như C lịch sử tạo ra mã có khả năng chạy nhanh hơn tới 100 lần, tùy thuộc vào tác vụ hiện tại. Tất nhiên, số lượng luồng càng cao thì khoảng cách hiệu suất càng rõ ràng. Vì điều này, chính Microsoft vào năm ngoái đã quyết định tài trợ cho một dự án nhằm tăng gấp đôi tốc độ của Python trong các phiên bản tương lai

Phiên bản beta mới vừa được tung ra thị trường và bạn có thể nói rằng nó mới và sẵn sàng để chạy

Phiên bản beta đầu tiên của phiên bản cuối cùng sẽ là phiên bản 3. 11 của Python đã được cung cấp cho công chúng trên Internet vào đầu tháng này. Dữ liệu hiệu suất mà Python Software Foundation đã cung cấp về phiên bản mới này là thứ đang thu hút sự chú ý nhiều nhất của nó. Ngoài một số thay đổi và tính năng, đây là điều thu hút nhiều sự quan tâm nhất

Các thử nghiệm, đã được thực hiện chạy trên phần mềm Ubuntu Linux được viết bằng Python và được biên dịch bằng trình biên dịch GCC, cho thấy kết quả có tốc độ cao hơn tới 60% trong một số trường hợp (trung bình là 25%) so với Python 3. 10, không cần thực hiện bất kỳ thay đổi nào đối với mã

Phiên bản ổn định sẽ không khả dụng cho đến tháng 10 tới

Tại Phoronix, họ đã sử dụng ứng dụng đo điểm chuẩn Pybench — một bộ gồm 31 bài kiểm tra đánh giá các khía cạnh khác nhau của ngôn ngữ Python (e. g. các phép toán số học, gọi phương thức, truy cập thuộc tính…) — để chứng minh hoặc bác bỏ tuyên bố của nhà phát triển. Và kết quả thật thuyết phục

tổng trung bình

Điểm chuẩn Python (Nguồn. lân quang)

điểm chuẩn. Đi

Điểm chuẩn Python (Nguồn. lân quang)

điểm chuẩn. 2 đến 3

Điểm chuẩn Python (Nguồn. lân quang)

điểm chuẩn. sự hỗn loạn

Điểm chuẩn Python (Nguồn. Phorotix)Điều gì đã thay đổi?

Thành tựu này đã được thực hiện, trong số các lý do khác, mà không cần phải thay đổi mức tiêu thụ bộ nhớ của Python 3. 11, cho đến thời điểm này, vẫn không đổi. Trên thực tế, những người tạo ra Python đã làm rõ trong tài liệu của họ rằng những thay đổi bắt nguồn từ hai lĩnh vực chính

"Trăn 3. 11 sẽ là thành quả của nỗ lực nhiều năm của CPython nhằm biến Python thành ngôn ngữ lập trình nhanh hơn," báo cáo của ZDNet.

"Nhà phát triển Core Python (CPython) Mark Shannon đã chia sẻ chi tiết về dự án giúp Python nhanh hơn tại hội nghị PyCon 2022 tuần này. " Năm ngoái, Microsoft đã tài trợ một dự án cho Python Software Foundation (PSF), do người sáng tạo Python là Guido van Rossum và Shannon dẫn đầu, để làm cho Python nhanh gấp đôi so với phiên bản ổn định hiện tại 3. 10 loạt. Tầm nhìn là thúc đẩy Python hướng tới hiệu suất của C. Microsoft đã thuê van Rossum vào năm 2020 và cho anh ta toàn quyền chọn bất kỳ dự án nào. Tại hội nghị PyCon 2021 năm ngoái, anh ấy nói rằng anh ấy "đã chọn quay về cội nguồn của mình" và sẽ làm việc với sự thiếu hiệu suất nổi tiếng của Python.

Dự án CPython nhanh hơn đã cung cấp một số cập nhật về CPython 3. 11 hiệu suất trong năm qua. Trước thềm PyCon 2022, dự án đã công bố nhiều kết quả hơn so với 3. 11 beta xem trước đến 3. 10 trên hàng chục chỉ số hiệu suất, cho thấy rằng 3. 11 là tổng thể 1. 25 lần nhanh hơn 3. 10. Shannon thực tế về khả năng cải thiện hiệu suất Python của dự án, nhưng tin rằng những cải tiến này có thể mở rộng khả năng sử dụng khả thi của Python cho nhiều máy ảo hơn. "Python được công nhận rộng rãi là chậm. Mặc dù Python sẽ không bao giờ đạt được hiệu suất của các ngôn ngữ cấp thấp như C, Fortran hoặc thậm chí Java, nhưng chúng tôi muốn nó có thể cạnh tranh với việc triển khai nhanh các ngôn ngữ kịch bản lệnh, như V8 cho Javascript hoặc luajit cho lua," ông đã viết vào năm ngoái trong .

"Cụ thể, chúng tôi muốn đạt được các mục tiêu hiệu suất này với CPython để mang lại lợi ích cho tất cả người dùng Python, kể cả những người không thể sử dụng PyPy hoặc các máy ảo thay thế khác. "

Đối với câu hỏi về trình biên dịch just-in-time (JIT) cho hiệu năng của Python, Shannon cho rằng nó không phải là ưu tiên và có thể sẽ không xuất hiện cho đến Python 3. 13, theo báo cáo của Python Software Foundation về sự kiện này. Theo kế hoạch triển khai Faster Python, CPython 3. 12 có thể nhận được một "trình biên dịch JIT đơn giản cho các vùng nhỏ" để biên dịch các vùng nhỏ của mã chuyên biệt, trong khi 3. 13 sẽ tăng cường trình biên dịch để mở rộng các vùng biên dịch.

Mặc dù Python là một ngôn ngữ năng động, dễ học với cú pháp đơn giản, nhưng nó tương đối chậm khi so sánh với các ngôn ngữ như Java, Go, C và C++

So sánh các khung phổ biến được xây dựng bằng Python (Django) và các ngôn ngữ như Go (Gin) cho thấy khung Go chạy nhiều yêu cầu hơn mỗi giây (114 963) so với Django (8 945);

Lý do cơ bản đằng sau việc mã Python thực thi chậm này là vì nó là ngôn ngữ viết động.

Ví dụ, Java là một ngôn ngữ được nhập tĩnh chạy tất cả các kiểm tra cần thiết và biên dịch mã trước khi chạy;

Mặt khác, Python là ngôn ngữ được biên dịch trong thời gian chạy bởi vì, là ngôn ngữ được viết động, bất kỳ loại hoặc giá trị biến nào cũng có thể thay đổi trong khi chương trình đang chạy. Vì lý do này, mã Python không thể được biên dịch trước và do đó, mã không thể được tối ưu hóa trong thời gian chạy như chúng ta có trong các ngôn ngữ cấp thấp như Java hoặc C

Một lý do khác đằng sau việc Python thực thi chậm so với các ngôn ngữ như Java hoặc C là vì Python là ngôn ngữ được thông dịch - trong khi Java là ngôn ngữ máy

Một ngôn ngữ được giải thích như Python cần được chuyển đổi thành ngôn ngữ máy trước khi thực thi;

Ngay cả khi Python chậm hơn, nó có một cú pháp đơn giản và một số lượng lớn các thư viện và cộng tác viên. Điều này có thể giải thích một phần lý do tại sao nó được sử dụng trong nhiều lĩnh vực phổ biến và ít phổ biến hơn như các tác vụ dành riêng cho GPU như học máy và trí tuệ nhân tạo

Vì vậy, không có cách nào để làm cho Python nhanh hơn?

Có một số cách bạn có thể thực hiện để làm cho chương trình Python của mình nhanh hơn bằng cách sử dụng

Mô-đun đa xử lý

Python là ngôn ngữ không cho phép đồng thời thông qua đa luồng. Đa luồng cho phép các phần chương trình khác nhau chạy đồng thời trên các lõi CPU riêng biệt, giúp chương trình chạy nhanh hơn

Python có một khóa trình thông dịch toàn cầu không cho phép nó thực hiện đa luồng;

Mô-đun đa xử lý của Python bỏ qua khóa trình thông dịch chung và cho phép bạn có nhiều trình thông dịch chạy đồng thời để thực thi chương trình Python của bạn nhanh hơn. Tuy nhiên, bạn có thể gặp sự cố với bộ nhớ dùng chung và khóa

tiện ích mở rộng C

Ngoài mô-đun đa xử lý, việc viết phần mở rộng C cho mã Python của bạn có thể cải thiện đáng kể thời gian chạy chương trình của bạn

Việc triển khai Python mặc định, CPython, được viết bằng C

Do đó, bạn có thể viết mã C dưới dạng phần mở rộng cho mã python của mình

C là ngôn ngữ cấp thấp nhanh sẽ giúp chương trình Python của bạn chạy nhanh hơn

Nhưng, cả hai phương pháp này cũng có nhược điểm của họ. Khó có thể chạy mô-đun đa xử lý một cách hiệu quả do chia sẻ và khóa bộ nhớ trong khi sử dụng phần mở rộng C;

Tuy nhiên, tất cả những điều này sắp thay đổi

Người tạo ra ngôn ngữ Python, Guido Van Rossum, đã tiết lộ kế hoạch giúp Python nhanh hơn để đóng góp cho Hội nghị thượng đỉnh ngôn ngữ Python ảo năm 2021 được tổ chức vào tháng 5

Để cải thiện Python 3 được phát hành gần đây. 10, kế hoạch tăng tốc Python lên gấp 2 lần sẽ bắt đầu với Python 3. 11

Trong bài thuyết trình đã xuất bản, Van Rossum giải thích rằng dự án cải thiện hiệu suất Python được xử lý bởi một "nhóm nhỏ do Microsoft tài trợ" như một phần trong cách Microsoft trả lại cho cộng đồng Python

Bài thuyết trình của Guido Van Rossum, Hội nghị thượng đỉnh ngôn ngữ Python ảo năm 2021

Ông đảm bảo rằng nhóm cũng sẽ chăm sóc bảo trì và hỗ trợ, và dự án sẽ là nguồn mở

Theo kế hoạch, Van Rossum chỉ ra rằng dự án tăng tốc Python sẽ diễn ra tuần tự, nhắm mục tiêu gấp 2 lần trong Python 3. 11 và tốc độ tối đa gấp 5 lần trong các bản phát hành Python tiếp theo

Bài thuyết trình của Guido Van Rossum, Hội nghị thượng đỉnh ngôn ngữ Python ảo năm 2021

Nhưng liệu nhóm có thể đạt được tốc độ này?

Van Rossum nói rằng họ không chắc chắn rằng họ sẽ đạt được gấp đôi, nhưng họ "lạc quan và tò mò"

Anh ấy đã đưa ra một số yếu tố ràng buộc mà họ phải làm việc vì đạt được tốc độ gấp đôi trong phiên bản 3. 11 có thể khó

Ông tuyên bố rằng bất kỳ thay đổi và cải tiến nào đối với Python không được phá vỡ tính ổn định của khả năng tương thích giao diện nhị phân ứng dụng (ABI); . Nó không được phá vỡ hoặc làm chậm các trường hợp cực đoan. Ông nói thêm rằng việc sửa đổi phải "giữ cho mã có thể duy trì được. "

Làm thế nào để họ có kế hoạch đạt được tốc độ gấp đôi trong Python 3. 11?

Trong các yếu tố hạn chế, Rossum và nhóm dự án cải tiến Python đã xác định một số khía cạnh mà họ tự do thay đổi để đạt tốc độ gấp 2 lần trong phiên bản 3. 11

Vì trình biên dịch và trình thông dịch mã byte là các thành phần thay đổi trong mỗi phiên bản phát hành, nên đây là một ứng cử viên tuyệt vời để tối ưu hóa tốc độ mà không vi phạm bất kỳ điều gì

Ông đề xuất giới thiệu "trình thông dịch bytecode thích ứng, chuyên dụng"; . Điều này sẽ hoạt động giống như một bộ đệm nội tuyến giúp tăng tốc độ thực thi

Tối ưu hóa tốc độ được đề xuất khác cho Python 3. 11 bao gồm tối ưu hóa ngăn xếp khung, chứng minh tốc độ gọi hàm, thay đổi định dạng tệp pyc và thực hiện xử lý ngoại lệ hiệu quả hơn

Tùy thuộc vào những cải tiến về tốc độ mà nhóm có thể đạt được trong Python 3. 11, Rossum tuyên bố rằng có thể đạt được tốc độ gấp 5 lần, nhưng "chúng ta sẽ phải sáng tạo. "

Có cách nào hiệu quả để cải thiện tốc độ Python trước Python 3 không. 11?

Trăn 3. 11, được đề xuất đi kèm với các cải tiến giúp Python nhanh hơn, sẽ không được phát hành cho đến năm 2022. Trước đó, chúng ta cần tìm cách tăng tốc các chương trình Python của mình

Để tăng tốc các chương trình Python của bạn, chúng tôi có thể triển khai các mô-đun đa xử lý Python hoặc sử dụng mã C làm phần mở rộng Python, như đã giải thích trước đó

Bạn cũng có thể sử dụng trình biên dịch JIT chẳng hạn như Numba nếu bạn đang sử dụng NumPy

Numba là trình biên dịch JIT tức thời, sử dụng trình trang trí để chuyển đổi mã Python và NumPy thành mã máy. Nó hoạt động bằng cách biên dịch mã Python, thay thế trình thông dịch Python, sau đó làm cho các hàm Python biên dịch trực tiếp thành mã máy, do đó cải thiện tốc độ trong thời gian chạy

Numba dịch các hàm Python sang mã máy được tối ưu hóa trong thời gian chạy bằng thư viện trình biên dịch LLVM tiêu chuẩn ngành

Khi sử dụng Numba, bạn không cần thay thế trình thông dịch Python, chạy một bước biên dịch riêng hoặc thậm chí cài đặt trình biên dịch C/C++. Bạn chỉ cần áp dụng một trong các trình trang trí Numba cho hàm Python của mình và Numba sẽ thực hiện phần còn lại

from numba import jit
import random

@jit(nopython=True)
def monte_carlo_pi(nsamples):
    acc = 0
    for i in range(nsamples):
        x = random.random()
        y = random.random()
        if (x ** 2 + y ** 2) < 1.0:
            acc += 1
    return 4.0 * acc / nsamples

Các nhà phát triển API cũng có thể sử dụng FastAPI, một khung web hiện đại, nhanh (hiệu suất cao) để xây dựng API với Python 3. 6+ dựa trên gợi ý loại Python tiêu chuẩn. Điểm chuẩn của TechEmpower cho thấy các ứng dụng FastAPI chạy trong Uvicorn là một trong những khung Python nhanh nhất hiện có

TechEmpower đo lường và xuất bản các điểm chuẩn hiệu suất thường xuyên của một số nền tảng ứng dụng web, khung công tác đầy đủ và khung vi mô

Nếu bạn đã quen với Flask thì việc học FastAPI sẽ không tốn quá nhiều thời gian của bạn

from typing import Optional
from fastapi import FastAPI
app = FastAPI()

@app.get("/")
def read_root():
    return {"Hello": "World"}

@app.get("/items/{item_id}")
def read_item(item_id: int, q: Optional[str] = None):
    return {"item_id": item_id, "q": q}

Đối với phát triển không phải API, nếu bạn muốn hoán đổi Django hoặc Flask phổ biến trong một số khối lượng công việc nhạy cảm với thời gian, bạn có thể xem xét các khung ít được sử dụng hơn như Falcon, Chai và apidaora. Theo dự án Web Frameworks Benchmark, Falcon (3), Chai (0. 12) và apidaora (0. 28) là 3 framework Python nhanh nhất dành cho Python 3. 9

Python sẽ trở nên nhanh hơn?

Tất nhiên, Python có thể được tăng tốc theo nhiều cách khác nhau, bao gồm cả việc sử dụng thời gian chạy thay thế để ngắt các mô-đun được viết bằng C/C++ , . Tuy nhiên, các phương thức này không hoạt động với CPython, đây là triển khai tham chiếu của Python, phiên bản ngôn ngữ được sử dụng rộng rãi nhất.

Có đáng học Python vào năm 2022 không?

Vâng, học Python rất đáng để học vào năm 2022 vì một số lĩnh vực hot nhất trong công nghệ – bao gồm học máy và trí tuệ nhân tạo – phụ thuộc rất nhiều vào các lập trình viên có kỹ năng Python.

Python có còn nhu cầu vào năm 2022 không?

“Mặc dù Python đã tồn tại hàng thập kỷ, nhưng nhu cầu về các kỹ năng Python vào năm 2022 sẽ tiếp tục tăng theo cấp số nhân nhờ vào việc sử dụng nó trong sự bùng nổ . Bạn muốn trở thành một lập trình viên Python?

Sẽ Trăn 3. 10 nhanh hơn?

Như Van Rossum đã nói, theo thông tin chính thức, bản phát hành mới nhất của Python 3. 11 nhanh hơn 10–60% so với Python 3. 10 và thân thiện hơn với người dùng.