Hướng dẫn python call c code

Nếu đã từng dùng qua các thư viện liên quan đến toán học của Python như numpy, các bạn sẽ để ý thấy các nó có tốc độ xử lý rất nhanh. Điều này là do một phần của package này được viết bằng C/C++ và phần code Python gọi những phần đó để chạy nên tốc độ chạy khi xử lý của numpy khá là nhanh.

Vậy làm sao để có thể gọi được mã C++ từ trong Python? Trong Python, có khá nhiều thư viện có thể giúp bạn đạt được điều này. Bài viết sau đây sẽ hướng dẫn bạn dùng thư viện ctypes của Python để có thể call function được code bằng C++.

Lợi ích của việc dùng hàm C++ trong Python

Trước hết, đây là những lợi ích của việc call function được viết bằng C++ trong Python:

  • Tận dụng code C++ đã có sẵn: Nếu bạn đã có sẵn một hàm/thư viện được viết bằng C++ và đã được test kỹ càng, bạn có thể tận dụng chúng được luôn thay vì phải viết toàn bộ sang Python. Nó sẽ giúp bạn tiết kiệm được đáng kể thời gian để code.
  • Tăng tốc độ xử lý: Python là ngôn ngữ thông dịch, còn C++ là ngôn ngữ biên dịch, do đó, C++ sẽ có tốc độ nhanh hơn rất nhiều so với Python. Ngoài ra, GIL [Global Interpreter Lock] của Python chỉ cho phép chạy duy nhất một thread tại một thời điểm nên việc dùng thread sẽ không thể tận dụng được các core của CPU. Việc dùng C++ còn giúp loại bỏ được hạn chế này.

1. Chuẩn bị shared library

Để dùng được code C++ trong Python, bạn sẽ cần phải compile nó ra dưới dạng shared library. Trong Windows, đây sẽ là một file có đuôi .dll, còn với Linux, nó sẽ có đuôi .so. Trong bài viết này, mình sẽ dùng Windows và compiler MSVC để làm ví dụ.

Trong ví dụ này, mình sẽ xuất một function in ra dãy số Fibonacci đến số thứ n. Code mẫu này mình sẽ save với đường dẫn src\test.cpp:

#include 
#include 

extern "C" {
    __declspec[dllexport] int test_func[int n] {
        std::vector f;
        int i;

        f.push_back[0];  // f[0] = 0
        f.push_back[1];  // f[1] = 1

        for [i = 2; i 

Chủ Đề