Hướng dẫn why is python 2 faster than 3? - tại sao python 2 nhanh hơn 3?

Vấn đề không phải là về tốc độ - chúng là cùng tốc độ hoặc Python 3.x nhanh hơn (tùy thuộc vào điểm chuẩn bạn nhìn vào). Cụ thể hơn, Python 2 đã từng nhanh hơn, nhưng rõ ràng, bây giờ họ đang ngang hàng với nhau (?). Xem các ý kiến ​​và sàn trượt này (về phía sau).

Các nhà phát triển cốt lõi cũng đang tích cực làm việc để tối ưu hóa Python 3 - mỗi bản phát hành mới của Python 3 đã nhanh hơn so với lần cuối cùng. Bạn có thể theo kịp các đề xuất và ý tưởng mới nhất về tối ưu hóa Python (cũng như nhiều biến chứng) bằng cách theo dõi danh sách gửi thư Python-Dev.

Thay vào đó, lý do nhiều người thường cung cấp cho không được cập nhật là vì khi Python 3 ra mắt, và trong vài năm sau đó, phần lớn các thư viện Python không được cập nhật để làm việc trên Python 3.x. Tuy nhiên, rất may, tình huống này được cải thiện rất nhiều ngày nay - phần lớn các thư viện của bên thứ 3 hiện đang tương thích với Python 3.

Câu hỏi thường gặp Python chứa thêm thông tin. Bạn cũng có thể kiểm tra bức tường Python của siêu năng lực hoặc sự sẵn sàng của PY3 để có được một cái nhìn tổng quan về các thư viện Python phổ biến hiện đang tương thích với Python 3.

CẬP NHẬT: (Mùa hè 2017)

Tôi cảm thấy phần nào bắt buộc phải lưu ý rằng hỗ trợ cho Python 2 chính thức kết thúc vào năm 2020.

Nhiều thư viện của bên thứ 3 cũng đang lên kế hoạch theo sau - một tập hợp con lớn của hệ sinh thái khoa học (ví dụ: matplotlib, gấu trúc, ipython) đang lên kế hoạch bỏ hỗ trợ cho Python 2 vào năm 2020, Django đang bỏ hỗ trợ ... Tôi sẽ không được ngạc nhiên nếu các thư viện khác làm như vậy.

Vì vậy, nếu bạn quan tâm đến việc đảm bảo bạn có thể sử dụng các tính năng mới nhất và lớn nhất trong Python hoặc thư viện yêu thích của bạn, bạn nên xem xét việc di chuyển sang Python 3 sớm hơn là sau này.

Dưới đây là một số hướng dẫn về chuyển đổi mã Python 2 thành 3:

  • https://docs.python.org/3/howto/pyporting.html
  • http://python3porting.com/
  • https://eev.ee/blog/2016/07/31/python-faq-how-do-i-port-to-python-3/

Tất nhiên, nó phụ thuộc vào, nhưng nó phụ thuộc vào điều gì và làm thế nào bạn có thể đánh giá phiên bản Python nhanh nhất cho ứng dụng của bạn?

Python 3 có chậm hơn Python 2 không? Phiên bản nào của Python 3 là nhanh nhất và bạn có những tùy chọn nào khác cho & nbsp; tốc độ?

Sử dụng bộ hiệu suất & nbsp; tiện ích

Nhóm Python cốt lõi quan tâm rất nhiều về hiệu suất, tôi đã đề cập trước trang web Speed.python.org, rất tuyệt khi so sánh các điểm chuẩn chính thức của Hồi giáo với các phiên bản của Cpython.

Có một vài vấn đề mặc dù:

  1. Kết quả khá khó đọc
  2. Họ không bao gồm Pypy

Thay vào đó, bạn có thể tải xuống hộp công cụ chạy trang web này bằng cách Running

pyperformance run --python={chosen_python_runtime} -o my_results.json

Điều này sẽ điều hành một loạt các ứng dụng được ghi lại trên thế giới thực của thế giới

Đây thực sự là những gì tôi đã làm cho bài viết này, chống lại các bản cài đặt chính thức của Python:

  • 2.7.10,
  • 3.4.4,
  • 3.5.4,
  • 3.6.1, và
  • 3.7 (Tôi có Beta 2).

Ngoài ra, điều này bao gồm Pypy (5.6.) Và Pypy3 (5.4.10).

Kết quả

Tôi đã phá vỡ kết quả xuống tùy thuộc vào trường hợp sử dụng, vì vậy hãy xem, chạy bài kiểm tra của riêng bạn và có thể viết bài kiểm tra của riêng bạn.

Tôi cũng đã tạo một tập lệnh đơn giản để lấy một danh sách các tệp dữ liệu hoàn hảo và tạo biểu đồ cho mỗi thử nghiệm. .

Trong tất cả các biểu đồ, kết quả là trong vài giây và thấp hơn là & nbsp; tốt hơn.

Các kết quả đầy đủ cùng với các biểu đồ có sẵn tại đây: https://github.com/tonybaloney/performancy_testing/tree/master/png

Tôi đã bao gồm các bài kiểm tra mà tôi mặc dù có ý nghĩa. Phần còn lại của các thử nghiệm cho thấy các mẫu rất giống nhau, trong phần kết luận.

Kết xuất các mẫu HTML

Thử nghiệm django_html sẽ sử dụng công cụ kết xuất mẫu Django để xây dựng bảng HTML 150x150 tế bào. Nó tận dụng các lớp nội dung và mẫu của động cơ Django.

Python 3.7 nhanh hơn 1,19 lần so với Python 2.7, nhưng bản phát hành Python 3.x duy nhất để đánh bại điểm chuẩn Python 2.7 mà tôi đã chạy. Điểm chuẩn Speed.python.org cho thấy kết quả tương tự.1.19x faster than Python 2.7, but the only Python 3.x release to beat the Python 2.7 benchmark I ran. The speed.python.org benchmark shows similar results.

Pypy đập vỡ bất kỳ kết quả Cpython nào, nhưng với PYPY3 chậm gấp đôi PYPY. Đáng chú ý là quyết định gần đây của Django về việc bỏ hỗ trợ Python 2 trong Django 2.0 và hơn thế nữa, điều đó có nghĩa là Pypy cũng sẽ không còn tương thích với Django 2.

Thời gian khởi động

Bài kiểm tra này chỉ đơn giản là kiểm tra thời gian thực hiện để thông dịch viên bắt đầu. Nếu bạn có thể hiểu được sự ràng buộc của Python trong thời gian bằng cách chạy nhiều quy trình thì điều này sẽ rất đáng kể.

Hãy lưu ý ở đây về cú nhảy với Pypy, đặc biệt là Pypy3, tôi sẽ đi vào lý do tại sao ở cuối bài viết này.

Nhưng mấu chốt của điều này là thời gian khởi động Python 2.7 vẫn còn bất bại.

Cryptography: crypto_paes

Trong thử nghiệm này, bạn sẽ thấy tốc độ giảm đáng chú ý giữa Python 2 và 3. Tại sao? Crypto yêu cầu rất nhiều sự khủng hoảng số và Python 3 không còn có loại số nguyên 32 bit, chỉ một số nguyên dài (rất).

Người dùng Pypy - Bạn sẽ nhận thấy rằng PYPY3 chậm hơn gần 5 lần so với PYPY!almost 5x slower than PyPy!

N-Queens: Bài kiểm tra thuật toán

Việc thực hiện này không đặc biệt thanh lịch, và xin lỗi vì đã đưa ra những ký ức tồi tệ cho bất cứ ai phải ngồi qua các bài giảng thuật toán về chủ đề này. Câu đố khá đơn giản là đặt (n) nữ hoàng trên một bàn cờ để họ có thể đưa nhau.

Trong loạt Cpython, 3.7 lại xuất hiện trên đỉnh, nhưng đáng chú ý là kết quả Pypy và Pypy3 rất giống nhau.

Điểm nổi số học

Điểm chuẩn của Float Float là một ứng dụng nặng về số học nhân tạo, nổi, sẽ tạo ra 100.000 đối tượng tính toán math.cos(), math.sin() và ________ 5 & nbsp ;.

Đây là loại ứng dụng hoàn hảo cho pypy, rất nhiều sự khủng hoảng số, các loại và phương pháp có thể dự đoán được. Python 3.7 có mã opcode gọi phương pháp nhanh mới đang được sử dụng trong thử nghiệm này.

Biểu cảm thường xuyên

Trong thử nghiệm Regex, 50 trang phổ biến nhất trên web và đăng nhập tất cả các hoạt động RegEXP được thực hiện. Mỗi thao tác được cho một trọng số được tính từ ước tính mức độ phổ biến của các trang nơi nó xảy ra và số lần nó được thực hiện trong khi tải mỗi trang. Cuối cùng, các chữ cái theo nghĩa đen trong dữ liệu được mã hóa bằng cách sử dụng ROT13 theo cách không ảnh hưởng đến cách RegEXPS khớp với đầu vào của chúng.

Tôi không biết những gì đã xảy ra với Pypy ở đây, tôi đã tò mò muốn biết liệu có ai khác có kết quả tương tự không!

CẬP NHẬT: Nhóm Pypy đã xem bài viết này và khắc phục sự cố trong một số giờ: the PyPy team saw this article and fixed the issue in a number of hours

Vậy Python 3 nhanh hơn Python & NBSP; 2?

Đúng! Trong hầu hết các bài kiểm tra. Các trường hợp ngoại lệ đáng chú ý là thử nghiệm crypto_paes, trong đó Python 3 chậm hơn 1,35 lần (vì các loại số nguyên), python_startup chậm hơn 1,39x.almost all tests. The notable exceptions were the crypto_paes test, where Python 3 was 1.35x slower (because of the integer types), python_startup as 1.39x slower.

Khởi nghiệp Python 3 chậm là một trong những vấn đề mà nhóm CPYThon cốt lõi đang làm việc trong các bản phát hành 3,8, 3,9.

Bên cạnh 2 bài kiểm tra đó, Python 3 còn nhanh hơn khoảng 1,21,3 lần trong các điểm chuẩn này. Bạn sẽ thấy một cải tiến nâng cấp lên Python 3.7 khi nó đứng đầu các kệ vào cuối năm nay.

Tại sao Pypy lại nhanh hơn rất nhiều và tại sao mọi người không chỉ sử dụng điều đó & nbsp; thay vào đó?

Pypy nhanh hơn CPython vì nó có trình biên dịch đúng lúc. Các trình biên dịch JIT có một lợi ích lớn ở chỗ chúng rất hiệu quả trong việc thực hiện các nhiệm vụ lặp đi lặp lại, có thể dự đoán được. Một trong những bản chất của điểm chuẩn là bạn cố gắng chạy cùng một đoạn mã nhiều lần để làm cho nó chính xác, đẩy ứng dụng và giảm tỷ suất lợi nhuận lỗi. Như vậy, Pypy tỏa sáng trên các thử nghiệm này.

Nhược điểm của một trình biên dịch JIT, và đặc biệt là Pypy, là chi phí khởi động cao. Một nhược điểm khác là thiếu khả năng tương thích cho nhiều phần mở rộng C. Bởi vì, Py Python, (Cpython, PSF Python chính thức) được viết bằng C, nhiều phần mở rộng của bên thứ 3 trên PYPI tận dụng điều này. Numpy sẽ là một ví dụ tốt, phần lớn Numpy được viết bằng mã C được tối ưu hóa. Khi bạn pip install numpy, nó sử dụng trình biên dịch C cục bộ của bạn và xây dựng một thư viện nhị phân cho thời gian chạy Python của bạn để sử dụng.

Bởi vì Pypy được viết bằng Python, nhiều mô -đun chỉ đơn giản là không thể hoạt động trong pypy. Vì vậy, bạn nên luôn luôn kiểm tra.

Ngoài ra, Pypy phải chịu một thách thức tương tự như CPython - sự thay đổi từ phiên bản 2 của ngôn ngữ sang phiên bản 3. Pypy3 Iithve đã không ổn định cho đến gần đây và trong các điểm chuẩn, bạn vẫn có thể thấy sự không nhất quán kỳ lạ với PYPY. Tôi cũng có vấn đề với các gói (ví dụ: pytest) bỏ hỗ trợ cho PYPY3 trong khi chúng giải quyết các vấn đề.

Sự kết luận

Python 3.7 là nhanh nhất trong số các chính thức của Python, và Pypy là triển khai nhanh nhất mà tôi đã thử nghiệm.

Tôi rất thích thấy Pypy3 cũng hoạt động, nếu không tốt hơn Pypy trong tương lai khi Python 2 trở nên ít sử dụng hơn.

Vẫn bị mắc kẹt trên Python & nbsp; 2?

Kiểm tra khóa học mới của tôi về Pluralsight để chuyển từ Python 2 đến 3.

ĐANG TẢI. . . Nhận xét và nhiều hơn nữa!
. . . comments & more!

Python 2 hoặc 3 nhanh hơn là cái nào?

Trên thực tế, Python 3 có xu hướng chậm hơn một chút so với 2.x. Không nhiều và bạn có thể coi chúng là giống nhau cho các mục đích thực tế, nhưng thực tế là mọi số nguyên hiện nay đều dài và mỗi chuỗi bây giờ Unicode có một số chi phí. Ứng dụng PyQT/Numpy của tôi chậm hơn khoảng 10% khi tự chạy các bài kiểm tra trên Python 3.3.Python 3 tends to be slightly slower than 2. x. Not by much and you can treat them as the same for practical purposes, but the fact that every integer is now a long and every string is now unicode does have some overhead. My PyQt/numpy app is around 10% slower running its self tests on Python 3.3.

Tại sao Python 2 tốt hơn 3?

Lịch sử của Python 2 so với Python 3. Python 2 ra mắt vào năm 2000. Việc nâng cấp ngôn ngữ được thiết kế để giúp người bình thường dễ dàng học, nhưng nó cũng thêm nhiều tính năng mà các nhà phát triển cần thiết, như hiểu biết danh sách, hỗ trợ Unicode, hỗ trợ Unicode,Bộ sưu tập rác, và cải thiện hỗ trợ cho lập trình hướng đối tượng.

Python 2 hay 3 tốt hơn?

Python 3 là một ngôn ngữ tốt hơn và đi kèm với một bộ thư viện tiêu chuẩn tốt hơn Python 2. Plus, kể từ năm 2020, các thư viện ngôn ngữ và tiêu chuẩn chỉ được cải thiện trong Python 3. and comes with a better set of standard libraries than Python 2. Plus, since 2020, the language and standard libraries are improving only in Python 3.

Phiên bản Python nào nhanh hơn?

Python 3.11 từ 10% đến 60% so với Python 3.10, tùy thuộc vào ứng dụng. is between 10% and 60% faster than Python 3.10, depending on the application.