Python 3.11 sẽ nhanh hơn?

Trăn 3. 11 nhanh hơn từ 10% đến 60% so với Python 3. 10, tùy thuộc vào ứng dụng. Chúng tôi đã đạt được điều này theo cách hoàn toàn di động bằng cách làm cho trình thông dịch thích ứng với chương trình đang chạy và bằng cách hợp lý hóa các cấu trúc dữ liệu chính

Trong buổi nói chuyện này, tôi sẽ giải thích những thay đổi chúng tôi đã thực hiện và cách chúng cải thiện hiệu suất

Thảo luận[c]Nội bộ Python

Sự miêu tả

Dự án "CPython nhanh hơn" nhằm mục đích tăng tốc Python, cụ thể là CPython, lên một hệ số lớn trong một vài bản phát hành tiếp theo. Bản phát hành đầu tiên để thấy những lợi ích của công việc này là Python 3. 11

Trăn 3. 11 bao gồm những thay đổi chính sau

  • Thông dịch viên chuyên biệt thích ứng [PEP 659]
  • Các khung thực thi được phân bổ liên tiếp
  • Miễn phí dùng thử-ngoại trừ
  • Bố cục đối tượng thông thường hơn
  • Từ điển đối tượng được tạo một cách lười biếng

Tôi sẽ mô tả từng cái trong số này, mô tả cách mỗi cái giúp tăng tốc Python và cách chúng tương tác với nhau

Mặc dù Python là một trong những ngôn ngữ máy tính được sử dụng rộng rãi nhất trong tài chính, nhưng nó thường được sử dụng cho các hoạt động cụ thể như phân tích dữ liệu hơn là phần mềm tạo thị trường thực tế. Điều này là do mức độ trừu tượng cao hơn của Python, khiến nó trở thành ngôn ngữ thông dịch chậm hơn so với các ngôn ngữ thay thế như C++ hoặc Java

Ảnh của Sammy Wong trên Bapt

Guido Van Rossum, tác giả của Python, muốn thay đổi điều đó. Van Rossum đã tuyên bố tại Hội nghị thượng đỉnh ngôn ngữ Python vừa qua rằng khi phiên bản 3. 11 được xuất bản vào tháng 10 năm 2022, anh dự định tăng gấp bốn lần tốc độ của Python. Mục tiêu tổng thể của anh ấy trong bốn năm tới là tăng tốc độ của Python lên gấp năm lần

Bài thuyết trình của Van Rossum, có sẵn trên Github, trình bày chi tiết cách anh ấy dự định thực hiện việc này, bao gồm trình thông dịch mã byte thích ứng, tối ưu hóa ngăn xếp khung và xử lý ngoại lệ 'không phí'. Nếu những thay đổi này tăng gấp đôi tốc độ của Python, Van Rossum tin rằng những thay đổi trong tương lai có thể bao gồm ABI [giao diện nhị phân ứng dụng] vững chắc hoặc tạo mã máy để tăng hiệu suất của Python hơn nữa

Theo Van Rossum, các sửa đổi có thể giúp ích cho người dùng các sản phẩm dựa trên Python. Các ngân hàng như JPMorgan và Bank of America, vốn là những người sử dụng nhiều Python trong hệ thống định giá rủi ro của họ — mặc dù JPMorgan đã chậm chạp trong việc rời bỏ Python 2 — và các công ty tài chính sử dụng ngôn ngữ này để phân tích dữ liệu về mặt lý thuyết có thể được đưa vào

Van Rossum không nói bất cứ điều gì về việc các sửa đổi sẽ ảnh hưởng đến người dùng tài chính của Python như thế nào. Tuy nhiên, do C++ nhanh hơn Python hơn 100 lần, nên việc áp dụng Python trong các hệ thống giao dịch khó có thể sớm xảy ra

Do “hình phạt hiệu suất” của Python, theo Jeffrey Ryan, một nhà phân tích lượng tử cơ bản tại Citadel, người hiện đang làm việc với tư cách là “người làm việc tự do về lượng tử”, nó thường được sử dụng trong các trường hợp khi tốc độ không quan trọng bằng khả năng tạo mã dễ dàng

Theo Ryan, tốc độ của Python tăng gấp 2 lần sẽ không tạo ra nhiều khác biệt về tài chính. Ông lưu ý: “Hầu hết các nội dung Python chuyên sâu về điện toán đều đã được viết bằng C [hoặc C++/Fortran] trong nội bộ — ví dụ như BLAS/LAPACK/NumPy/TensorFlow”. “Nếu hiệu suất tuyệt đối là quan trọng, có lẽ bạn sẽ viết mã nó bằng C/++ và bọc nó bằng Python, như những thư viện này vẫn làm. ”

Ngay cả khi Python trở nên nhanh hơn đáng kể vào năm 2022 và hơn thế nữa, Ryan tin rằng các ngân hàng và tổ chức tài chính khác sẽ chậm chạp trong việc áp dụng phiên bản mới. “Việc chuyển đổi từ 2. X đến 3. X quá đau đớn và mới mẻ đối với hầu hết mọi người để trải qua lần nữa,” anh ấy nói. “Nếu có bất cứ điều gì xảy ra, tôi nghĩ điều này sẽ khiến nhiều người xem xét lại việc sử dụng Python hoàn toàn và chuyển sang các ngôn ngữ khác có ý nghĩa hơn, như Julia hoặc Golang. ”

Tuy nhiên, nếu chúng ta nghĩ xa hơn về các ngân hàng lớn, việc cải thiện tốc độ từ 2 đến 3 lần có thể có ý nghĩa rất lớn đối với các nhà khoa học dữ liệu và những người khác tạo ra các tập lệnh mất nhiều thời gian để hoàn thành, giả sử rằng giới hạn không phải là đầu vào/đầu ra. Tuy nhiên, trong những trường hợp đó, tốc độ có thể tăng lên khi làm việc với các tệp đầu vào thuộc các loại khác nhau. Tệp CSV đọc nhanh hơn nhiều so với tệp Excel và tệp lát gỗ hoặc dưa chua thậm chí còn nhanh hơn. Vì vậy, tóm lại, ai muốn chờ đợi, tôi sẽ thực hiện bất kỳ cải tiến tốc độ nào mà tôi có thể nhận được nhưng nếu là một ngân hàng lớn, tôi có thể chậm thích ứng vì hàng tỷ đô la sẽ bị đe dọa

Tôi hy vọng bạn thích đọc này. Nếu bạn muốn hỗ trợ tôi với tư cách là một nhà văn, hãy cân nhắc đăng ký để trở thành thành viên của Medium. Chỉ với 5 đô la một tháng và bạn có quyền truy cập không giới hạn vào Phương tiện

Tiền mặt miễn phí. Đăng ký thẻ Capital One này và kiếm tiền thưởng 200 đô la tiền mặt một lần sau khi bạn chi 500 đô la cho các giao dịch mua trong vòng 3 tháng kể từ khi mở tài khoản. https. //vốn. một/3DRIBSG

Thêm nội dung tại PlainEnglish. io. Đăng ký nhận bản tin hàng tuần miễn phí của chúng tôi. Theo dõi chúng tôi trên Twitter và LinkedIn. Tham gia cộng đồng của chúng tôi

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

phần 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ố ràng buộc, 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 bytecode và trình thông dịch 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

Là Python 3. 11 tốt?

Trăn 3. 11 được xuất bản vào ngày 24 tháng 10 năm 2022. Phiên bản Python mới nhất này nhanh hơn và thân thiện với người dùng hơn . Sau mười bảy tháng phát triển, giờ đây nó đã sẵn sàng để sử dụng vào thời gian chính. Như trong mọi phiên bản, Python 3. 11 đi kèm với rất nhiều cải tiến và thay đổi.

Là Python 3. 10 nhanh?

Tôi đếm được năm bài kiểm tra trong đó Python 3. 10 nhanh hơn một chút so với Python 3. 11 . Ở những nơi khác, Python 3. 11 nhanh hơn tới 64% so với Python 3. 10. Theo ý nghĩa hình học, Python 3. 11 nhanh hơn 14% so với Python 3. 10.

Phiên bản Python nào nhanh nhất?

Trăn 3. 11 khá thú vị với vô số cải tiến về hiệu suất, trông tốt hơn nhiều trong bộ phận hiệu suất do Dự án CPython nhanh hơn. Trăn 3. 11 có thể nhanh hơn 10-60% so với Python 3. 10.

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

Miller trích dẫn báo cáo của nhóm rằng Python 3. 11 đã chứng kiến ​​tốc độ tăng từ 10-60% trong một số lĩnh vực của ngôn ngữ -- và cung cấp cái nhìn sâu sắc này về công việc của họ.

Chủ Đề