Tôi muốn viết một daemon trong C++, sẽ giữ một cấu trúc dữ liệu đồ thị và sẽ tính toán một số phụ thuộc. Tôi cũng muốn có Python Batch (cũng là một daemon - một phụ trợ cho HTML dựa trên GUI), cho phép người dùng tương tác hoạt động trên các cấu trúc C++ này - thêm/xóa/kết nối/... nút và đọc kết quả tính toán.Python <-> C++ giao tiếp hướng đối tượng
Tôi rất muốn chọn cơ chế giao tiếp tốt nhất hiện có.
Các chức năng bắt buộc là:
- Python và C++ sẽ có thể hoạt động trên các nút theo cách hướng đối tượng, vì vậy tôi rất thích để có thể viết mã như
n1 = node('a'); n2 = n1.add_subnode('b'); n2.ports('test').connect(node('c'))
- Các Python hàng loạt không phải được "tách biệt" khỏi trình nền C++ - chúng có thể có cùng tuổi thọ (nhưng sẽ tốt cho việc phân tách hàng loạt từ C++ daemon trong trường hợp lỗi C++ hoặc lỗi gì đó - việc tách này là tùy chọn)
- Giao tiếp nên được nhanh chóng - Python sẽ có thể nhận được thông tin về rất nhiều nút và cho phép người dùng cuối làm việc suôn sẻ càng nhiều càng tốt.
Hiện nay tôi đã suy nghĩ về:
- IPC (như 0MQ) với một số loại cơ chế dữ liệu tuần tự.
- RPC dựa trên Protocol Buffers hoặc Thrift.
- tích hợp dựa trên Boost.Python
IPC và các giải pháp RPC có vẻ tốt, nhưng tôi phải viết một giấy gói lớn để có được những chức năng từ điểm 1. Mặt khác tôi đã không tìm thấy thông tin về việc sử dụng Boost. Python trong C++ daemon và tôi không biết nếu nó thậm chí có thể.
Cảm ơn bạn, trình nền C++ phải được viết bằng C++ nhưng sau khi một số điều tra, tôi đã bắt gặp một ý tưởng, nó không phải là daemon - nó có thể được viết thành bộ thư viện được Python sử dụng bằng cách sử dụng 'Cython' /' Boost.Python'. Phần C++ là một trình biên dịch dưới mui xe, biên dịch đồ thị thành một số mã máy nhị phân. Tôi nghĩ rằng tôi tìm thấy giải pháp - làm cho Python daemon mà sẽ gọi một số chức năng từ thư viện C++ của tôi bằng cách sử dụng 'Cython' là giải pháp rất tốt. –
Đồng ý. Nói chung nó là lựa chọn tốt nhất có thể: để thực hiện logic điều khiển chung trong Python và cung cấp những thứ không thể được thực hiện bằng Python như các mô đun mở rộng được thực hiện trong C++. – Ellioh