2010-11-15 32 views
5

Tôi có một hệ thống hiện được viết bằng Python có thể được chia thành các lớp phụ trợ và giao diện người dùng. Python là quá chậm, vì vậy tôi muốn viết lại backend trong một ngôn ngữ biên dịch nhanh trong khi vẫn giữ lối vào trong Python, theo cách cho phép chức năng phụ trợ được gọi từ Python. Những lựa chọn tốt nhất để làm như vậy là gì?Lựa chọn ngôn ngữ để viết tóm tắt rất nhanh giao tiếp với Python?

Tôi đã coi cython nhưng rất hạn chế và cồng kềnh để viết và không nhanh hơn nhiều. Từ những gì tôi nhớ của Boost Python cho C++, nó rất khó chịu để duy trì cầu nối giữa các ngôn ngữ. Có lựa chọn nào tốt hơn không?

yếu tố chính của tôi là:

  • tốc độ thực hiện
  • tốc độ biên soạn
  • ngôn ngữ là declarative
+2

Làm thế nào để bạn tìm ra con số của cython không nhanh hơn nhiều? Bạn đang khai báo các loại? Đó là nơi tăng tốc chính là. – aaronasterling

+0

Cython, trên thực tế là một công cụ rất thuận tiện để tích hợp python và "c code". Nó không phải là ở tất cả rườm rà. Đơn giản, hãy viết những hàm đó có thể giúp tăng tốc và phơi bày chúng dưới dạng thư viện bằng cách sử dụng cython. – pyfunc

Trả lời

7

C++ với SWIG có thể tạo ra tất cả các mã keo mà bạn cần. Vì vậy, miễn là bạn tránh nhảy quá mức giữa C + + và python nó sẽ nhanh như C++ của bạn. Giao diện SWIG thường khá đơn giản để tạo ra trừ khi bạn đang làm một cái gì đó "kỳ quặc".

+1

+1 Tôi cũng khuyên bạn nên SWIG. Đó là _very_ dễ sử dụng. Tính năng không được hỗ trợ là ** 1/** Phiên bản quá tải của một số toán tử nhất định (mới, xóa, v.v.) ** 2/** Lớp lồng nhau và vài thứ khác, nhưng có cách giải quyết và bạn sẽ nhận được cảnh báo rõ ràng. – log0

2

Nếu bạn đã sử dụng Jython, bạn có thể gọi vào các chương trình Java back-end dễ dàng (trivially). Java khoảng hai lần chậm như c và 10x nhanh hơn so với python thời gian qua tôi đã kiểm tra.

+0

Vấn đề là lần cuối cùng tôi kiểm tra, jython đã sử dụng phiên bản python khá cổ. Hiện nó có quản lý ngữ cảnh chưa? – aaronasterling

+0

@aaronasterling - Đây thực sự là một phiên bản cũ, 2.5.2rc2 là phiên bản mới nhất. Nó có trình quản lý ngữ cảnh (hiện tại tôi đã cài đặt bản sao) nhưng vẫn thiếu nhiều tính năng được bao gồm trong 2.6 và 2.7, đủ để tôi thích xử lý việc duy trì các ràng buộc tăng trăn hơn là sử dụng bản phát hành cũ . : D –

1

Tôi không đồng ý với Boost :: Python. Nó có thể trở nên cồng kềnh khi gói một thư viện trung tâm C++ - hiện tại và cố gắng không thay đổi giao diện. Nhưng đó không phải là những gì bạn đang tìm kiếm để làm.

Bạn đang tìm cách đẩy nâng nặng của giải pháp python hiện có sang ngôn ngữ nhanh hơn. Điều đó có nghĩa là bạn có thể kiểm soát giao diện.

Nếu bạn đang ở trong kiểm soát của giao diện, bạn có thể giữ nó python-thân thiện, và bp thân thiện (IE: tránh những thứ có vấn đề như con trỏ và loại không thay đổi như l-giá trị)

Trong trường hợp đó, Boost :: Python có thể đơn giản như nói với nó những hàm nào bạn muốn gọi từ python.

Các vấn đề liên quan