Từ 1 tới 1 trên tổng số 1 kết quả

Đề tài: C/C++ and Python : Wrapper C/C++ for Python ( with IDE and Debuger ) , Write Python module by C/C++, Cthon, Cython...

  1. #1
    Ngày gia nhập
    06 2007
    Nơi ở
    C:\WINDOWS\system32\dllcache\
    Bài viết
    3,007

    Mặc định C/C++ and Python : Wrapper C/C++ for Python ( with IDE and Debuger ) , Write Python module by C/C++, Cthon, Cython...

    Chap 1. C/C++ and Python


    I. Giới thiệu

    Lâu rồi cũng muốn viết một bài gì đó đóng góp cho cộng đồng. Dạo này khắp nơi machine learning nên người người python, nhà nhà python. Nên rất nhiều người quan tâm đến vấn đề C/C++ and python. Nên mình viết 1 bài đóng góp....

    a. Mục đích

    Bạn biết đấy, python rất dễ viết, dễ dùng, rất thích... Nhưng không phải tự nhiên người ta lại cần dùng C/C++ trong python, ngay cả những module nổi tiếng như numpy vẫn có tỉ lệ code C/C++ bên trong đó.

    Theo ý kiến của mình thì người ta thường dùng C/C++ module cho python với mục đích :
    + Để tối ưu hóa tốc độ
    + Để tận dụng các thư viện, source code có sẵn viết trên C/C++












    b. Các cách tiếp cận ( cách làm )

    Có nhiều cách tiếp cận để xử lý vấn đề này, mình xin trình bày 3 cách mà mình đã tìm hiểu được.


    + Cách tiếp cận 1 : Gọi hàm từ C/C++ trong python (thường được dùng để khai thác các thư viện có sẵn, đã build thành binary như *.so,*.a, *.dll mà mình không có source code)
    . Ý tưởng cách này khá đơn giản, đó là gọi các hàm C mà được khai báo dưới dạng Standard Calling. Ưu điểm của cách này là DEV C/C++ ko phải làm gì nhiều, chỉ cần khai báo các hàm lại thành __cdecl hoặc __stdcall là được. Nhược điểm của cách này là DEV Python phải hiểu rõ cấu trúc dữ liệu của C/C++, đôi khi là cả con trỏ, và đôi khi chẳng biết phải free bộ nhớ như thế nào cho an toàn!!!!





    + Cách tiếp cận 2 : Viết code mẫu bằng python (*.pyx), sau đó dùng công cụ có sẵn của python để convert sang C code, sau đó build thành thư viện của python pyd rồi chạy. Cách này thường được dùng để tối ưu hóa các module python, do DEV Python viết. DEV Python trong trường hợp này ko cần biết code C/C++. Chỉ cần viết code dạng python theo cú pháp của Cython là nó sinh ra code. Ưu điểm của cách này là ko cần học code C/C++, DEV Python tự viết được. Nhược điểm của cách này là code C/C++ gen ra sẽ ko ngon bằng DEV C/C++ viết




    + Cách tiếp cận 3 : Viết thêm code wrapper trong C/C++, build thành thư viện mà dùng được cho cả python và C/C++. Các hàm export ra là hàm của Python, trả về Python Object
    . Với cách tiếp cận này thì điều tuyệt vời nhất là có Visual Studio hỗ trợ viết code và debug 1 lúc trên cả 2 layer Python và C/C++


    Chap 2. Viết thêm code wrapper trong C/C++


    Như đã trình bày ở trên, có nhiều cách tiếp cận khác nhau, tùy từng trường hợp cụ thể mà ta chọn cách này hay cách khác để giải quyết vấn đề của mình cho hợp lý. Đầu tiên ở đây, tôi xin trình cách cách viết thêm code wrapper trong C/C++

    a. Nguyên tắc
    + Với cách này bạn sẽ build ra file thư viện của C/C++ (*.so, *.dll ....). Thư viện có thể dùng được cho C/C++.
    + Trong code viết thêm có thể có nhiều module. Giả sử bạn export ra 2 thư viện là ABC và DEF, nếu bạn đặt tên là ABC.so thì python sẽ load module ABC bên trong, nếu bạn đặt tên là DEF thì python sẽ load module DEF bên trong.
    + Linux : File so build cho python 2 sẽ chỉ dùng được cho python 2, file so build cho python 3 sẽ chỉ dùng được cho python 3. Windows tương tự với file dll
    + Mình hướng dẫn bạn viết code trên Windows, nhưng source code này vẫn có thể đem sang linux build bình thường nhé. Mình sẽ hướng dẫn của việc build trên linux

    b. Công cụ phát triển trên windows (Nếu bạn đã có sẵn code thì bỏ qua bước này)
    Điều tuyệt vời nhất trong cách tiếp cận này là có công cụ hỗ trợ debug full cả 2 layer
    Cài đặt Python 2 hoặc Python 3 tùy nhu cầu
    Cài đặt Visual Studio 2017 Pro : https://visualstudio.microsoft.com/vs/whatsnew/
    Cài đặt thêm Visual Assist để code C++ cho nhanh: http://diendan.congdongcviet.com/threads/t42810::visual-assist-10-9-2223-co-thuoc-ben-trong-co-the-chay-kem-visual-studio-2017.cpp


    c. Hello World




    ...... đang viết dở ....
    Attached Thumbnails Attached Thumbnails numpy.png   cach01.png   cach02.png   cach03.png  
    Đã được chỉnh sửa lần cuối bởi langman : 17-08-2018 lúc 09:27 PM.
    ^_,^

    Facebook : https://www.facebook.com/langmaninternet

    Bùi Tấn Quang

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn