2013-07-19 23 views
6

Về cơ bản tôi muốn thực hiện một chức năng gọi chương trình Python viết bằng C.Python-C tích hợp: ctypes, CFFI hoặc tạo một Module Binary

Vì vậy (như xa như tôi biết) tùy chọn của tôi là:

  • ctypes/CFFI
    • Tạo một DLL/SO/DyLib chứa các hàm C và truy cập chúng bằng ctypes hoặc CFFI. Rõ ràng CFFI là cách nhanh hơn với nhược điểm duy nhất của việc phải khai báo trong python tất cả các chữ ký chức năng.
    • Ưu điểm:
      • Đừng có để thực hiện bất kỳ sự thích nghi trong các chức năng C của tôi. Tất cả các loại-dịch được thực hiện bằng Python.
    • Nhược điểm:
      • Hiệu suất?
  • Python Binary Mô-đun
    • Viết một giao diện python trong C, chuyển đổi mô-đun C của tôi vào một mô-đun python nhị phân
    • Ưu điểm:
      • Hiệu suất?
    • Nhược điểm:
      • Tất cả các loại-dịch được thực hiện trong C. Sử dụng [SIP] [3] này có thể được tự động.

Chuyển đổi các mô-đun C vào một con trăn mô-đun nhị phân thực sự nhanh hơn?

Cả hai giải pháp có hỗ trợ gửi hàm callback python đến hàm C không?

SIP có phải là tùy chọn tốt để tạo giao diện python không? Có sự lựa chọn nào khác không ?

Có bất kỳ đặc điểm nào khác trong số đó không?

+1

Tìm thấy một số nội dung hay: [5 cách sử dụng Python với mã gốc] (http://kos.gd/2013/01/5-ways-to-use-python-with-native-code/), [ Công cụ trình bao bọc Python: A Nghiên cứu hiệu suất] (http://web.archive.org/web/20070703071726/http://people.web.psi.ch/geus/talks/europython2004_geus.pdf) – romulof

Trả lời

1

Tôi chỉ xem xét một danh sách cũ của tùy chọn tôi công bố liên quan đến điều này: http://stromberg.dnsalias.org/~strombrg/speeding-python/

Nếu bạn chỉ nhắm mục tiêu CPython (2.x hoặc 3.x), tôi muốn có thể đi cho Cython.

Nếu bạn muốn có thể chạy trên Pypy, CFFI có thể tốt; Tôi chưa thử nó, nhưng nó thật tuyệt.Nó không hoàn toàn giống như ctypes mặc dù - ctypes có nhiều ABI cấp, trong khi CFFI là cấp API nhiều hơn - đó là tốt đẹp.

Nếu bạn muốn có thể chạy trên Jython quá, subprocess có lẽ là đặt cược tốt nhất của bạn.

+1

Các hàm C đã sẵn sàng bằng văn bản. Tấn mã ổn định. Tôi chỉ đang tìm cách sử dụng sau đó trong python. – romulof

+0

Điều đó thật thú vị, mặc dù các đề xuất của tôi có thể vẫn áp dụng. – dstromberg

+0

Giả sử ctypes chậm ở ranh giới <-> trăn. Họ đã tối ưu hóa điều này cho một số ứng dụng phổ biến trong Pypy. – dstromberg