Trong một bài đăng gần đây, chúng tôi đã thảo luận về cách chạy Python nhanh hơn khoảng 91 lần so với tốc độ thông thường của nó. Trong bài đăng này, tôi muốn thảo luận về một câu hỏi chưa được trả lời từ câu hỏi trước
Các giải pháp được cung cấp hoạt động như thế nào so với kỹ thuật sửa lỗi hiệu suất truyền thống của Python — Cython?
Mặc dù Python là một ngôn ngữ lập trình tuyệt vời, nhưng nhược điểm chính của nó là hiệu năng. Ngôn ngữ tao nhã với cú pháp đơn giản không được tạo ra để tính toán nhanh hơn
Cython đã thu hẹp khoảng cách này trong nhiều năm bằng cách chuyển đổi mã Python thành các chương trình C đã biên dịch. Một loạt các gói máy tính Khoa học dựa trên Cython để tăng tốc độ tính toán
Hãy so sánh hiệu suất của nó với giải pháp thay thế hiện đại
Chúng ta sẽ bắt đầu bằng cách đếm các số nguyên tố bằng Python đơn giản. Sau đó, chúng tôi sẽ so sánh nó với phiên bản Cython của nó. Chúng tôi sẽ lặp lại chúng bằng cách sử dụng mô-đun đa xử lý của Python để tìm hiểu lợi ích của nó
Cuối cùng, chúng tôi sẽ so sánh hiệu suất với các cách hiện đại để tăng tốc các chương trình Python
Cython. vs Python để tính toán đơn giản
Cách đơn giản nhất để nắm bắt những lợi ích của Cython là sử dụng nó trong một phép tính thô sơ. Ở đây chúng tôi sử dụng cùng một biện pháp mà tôi đã sử dụng trong điểm chuẩn trước đó - Đếm số lượng các số nguyên tố bên dưới một số
Chúng tôi sử dụng mô-đun cProfile để đo hiệu suất của mọi tính toán. cProfile là một trong nhiều mô-đun Python tiêu chuẩn để đo thời gian chạy mã
Tính toán bằng Python
Đoạn mã sau sẽ đếm số lượng các số nguyên tố dưới 35.000 và in một báo cáo hiệu suất chi tiết
Đoạn mã của Tác giảKhi chạy đoạn mã Python ở trên, đầu ra có thể giống như bên dưới. Các số có thể khác nhau tùy theo thông số kỹ thuật PC của bạn
Ảnh chụp màn hình của tác giả
Vì có thể có nhiều yếu tố ảnh hưởng đến hiệu suất nên bạn nên thực hiện thử nghiệm nhiều lần và sử dụng giá trị trung bình để so sánh. Mức trung bình cho việc thực hiện trên trong PC của tôi là 18. 721 giây
Tính toán bằng Cython
Sử dụng Cython khác với sử dụng Python. Trước tiên, chúng ta cần chuyển đổi tập lệnh Python thành C
- Cài đặt Cython nếu nó chưa được cài đặt
pip3 install --upgrade cython
2. Tạo một tệp count_prime.pyx
với nội dung bên dưới. Nó giống như trước đây
3. Tạo một tệp khác, setup.py
, trong cùng thư mục với nội dung bên dưới. Nó sẽ biên dịch mã của bạn thành một chương trình C
4. Bây giờ, chạy lệnh sau trong cửa sổ đầu cuối sẽ tạo phiên bản C của chức năng đếm số nguyên tố của chúng tôi
python setup.py build_ext --inplace
5. Ngoài ra, hãy đổi tên [hoặc di chuyển] tệp pyx vì nó có thể gây xung đột nhập nếu không
mv count_prime.pyx count_prime_dep.pyx
6. Cuối cùng, nhập chức năng vào ứng dụng chính của chúng tôi và chạy nó giống như cách chúng tôi gọi bất kỳ chức năng python nào khác
Đoạn mã của Tác giảThời gian trung bình để chạy chương trình này là 11. 210 giây. Đây là báo cáo cProfile mẫu từ một trong mười thử nghiệm tôi đã thực hiện
Ảnh chụp màn hình của tác giả
Giảm từ 18 giây xuống 11 là một cải tiến đáng chú ý. Cython thực hiện công việc của mình như mong đợi. Hãy lặp lại các bước cho kịch bản đa xử lý
Cython. so với Python trên đa xử lýMô-đun đa xử lý trong Python là một cách tuyệt vời để bắt đầu nhiều quy trình con. Mỗi quy trình sẽ chạy một phiên bản mã của bạn. Nếu bộ xử lý có lõi chạy không tải, chúng cũng có thể chạy song song
đa xử lý Python
Đoạn mã sau sẽ tính toán các số nguyên tố dưới 20K, 25K, 30K, 35K và 40K trong nhiều quy trình [song song nếu có thể. ]
Đoạn mã của Tác giảChạy đoạn mã trên sẽ dẫn đến thời gian trung bình là 29. 7 giây. Các kết quả đầu ra có thể trông giống như dưới đây
Ảnh chụp màn hình của tác giả
đa xử lý Cython
Đoạn mã dưới đây sẽ lặp lại quy trình tương tự với phiên bản C mà chúng tôi đã biên dịch trước đó
Thời gian trung bình cho việc này là khoảng 18 giây và đầu ra có thể giống như bên dưới
Ảnh chụp màn hình của tác giả
Một lần nữa, Cython đã chứng tỏ hiệu quả trong việc tăng tốc đáng kể thời gian xử lý của python. Nó đã cắt giảm thời gian chạy toàn bộ vòng lặp xuống 37. 9%
Điện toán hiệu năng cao với TuplexChúng tôi đã thấy thành công ngoạn mục khi sử dụng Cython. Trong ứng dụng đa xử lý và đếm số nguyên tố đơn giản, nó giúp giảm đáng kể thời gian thực hiện
Điều này có thể nhanh hơn?
Nếu bạn đang tìm kiếm một bài đăng chi tiết về Tuplex, thì đây là một
Làm cách nào để tăng tốc đường ống dữ liệu Python lên tới 91X?
Hướng dẫn dài 5 phút có thể tiết kiệm hàng tháng cho các dự án dữ liệu lớn của bạn
hướng tới khoa học dữ liệu. com
Tuplex cho một quá trình duy nhất
Tuplex chuyển đổi các tập lệnh Python thành các mã bit LLVM và chạy chúng song song. Kết quả là một sự cải thiện đáng kể trong hiệu suất. Thư viện mới này tập trung vào các đường dẫn dữ liệu, nhưng các ứng dụng của nó không chỉ giới hạn trong khoa học dữ liệu
Đoạn mã dưới đây sẽ chạy một phép tính duy nhất bằng Tuplex. Bởi vì chúng tôi chỉ chuyển một số duy nhất trong đối số danh sách của phương thức song song hóa, Tuplex sẽ chạy nó trong một luồng đơn
Đoạn mã của Tác giảPhương pháp tuplex cho kết quả trung bình là 9 giây. Lưu ý rằng chúng tôi không xem xét thời gian Tuplex cần để thiết lập ngữ cảnh
Ảnh chụp màn hình của tác giả
Thật ấn tượng so với 11 giây của Cython. Kết quả cũng có thể khác nhau tùy theo kiến trúc của máy tính. Nhưng con số này cũng đủ cho thấy Cython có một đối thủ xứng tầm
Tuplex trên tính toán song song
Một so sánh cuối cùng đang chờ xử lý có thể là mục đích chính của Tuplex - song song hóa. Hãy tính toán bài tập đa xử lý tương tự với Tuplex. Tinh chỉnh dòng cuối cùng của ví dụ quy trình đơn Tuplex sẽ thực hiện thủ thuật. Đây là giao diện của nó
Đoạn mã của Tác giảKết quả của việc chạy mã Tuplex song song là trung bình 10 giây đáng kinh ngạc. Để hoàn thành cùng một tác vụ, Cython mất 18 giây và Python đơn giản mất 29 giây
Ảnh chụp màn hình của tác giả
Sự kết luận
Cython đã từng là bản sửa lỗi hiệu suất chính [và duy nhất] dành cho các lập trình viên Python. Thư viện thường hoạt động tốt;
Tuy nhiên, một thư viện tương đối mới Tuplex đang hoạt động một cách đầy hứa hẹn. Trong bài viết này, chúng tôi đã thực hiện một thí nghiệm đếm số nguyên tố để so sánh Tuplex với các phiên bản Cython. Dường như cũng có sự giảm đáng kể về thời gian thực hiện
Nhưng kết quả có thể khác nhau tùy theo phần cứng, hệ điều hành và trạng thái hệ thống của bạn. Ngoài ra, vì Tuplex chưa sẵn sàng sản xuất nên bạn phải thận trọng khi sử dụng. Mặt khác, Cython ổn định và nhiều ứng dụng trong sản xuất đã sử dụng nó
Toàn bộ điểm so sánh này không phải là kết luận cái này tốt hơn cái kia. Tuplex còn một hành trình dài phía trước để đi đến thời điểm này. Tuy nhiên, nếu Cython không phù hợp với dự án của bạn, thì đó không phải là ngõ cụt. Không còn nữa
Cảm ơn đã đọc, người bạn. Có vẻ như bạn và tôi có rất nhiều sở thích chung. Tôi muốn kết nối với bạn trên LinkedIn, Twitter và Medium
Chưa phải là thành viên Medium? . Bạn có thể thưởng thức hàng nghìn bài viết sâu sắc và ủng hộ tôi khi tôi kiếm được một khoản hoa hồng nhỏ khi giới thiệu bạn