Chcę napisać demona w C++, który będzie przechowywał strukturę danych wykresu i obliczy niektóre zależności. Chcę także mieć Pythona Batch (także demona - backend do GUI opartego na HTML), który pozwoli użytkownikom na interaktywną pracę na tych strukturach C++ - dodawaj/usuwaj/połącz/... węzły i czytaj wyniki obliczeń.Python <-> Komunikacja obiektowa C++
Chciałbym wybrać najlepszy dostępny mechanizm komunikacji.
Obowiązkowa Funkcjonalność:
- Python i C++ powinien być w stanie działać na węzłach obiektowego sposób, więc chciałbym, aby móc napisać kod jak
n1 = node('a'); n2 = n1.add_subnode('b'); n2.ports('test').connect(node('c'))
- Python partia nie robi muszą być "oddzieleni" od demona C++ - mogą mieć ten sam czas życia (ale dobrze byłoby jakoś oddzielić partię od demona C++ w przypadku awarii C++ lub coś złego - ta separacja jest opcjonalna)
- Komunikat powinien bądź szybki - Python powinien być w stanie uzyskać informacje o wielu węzłach i umożliwić użytkownikom końcowym sprawne działanie tak dużo, jak to możliwe.
Obecnie Myślałam o:
- IPC (jak 0MQ) z pewnego rodzaju mechanizm serializacji danych.
- RPC na podstawie Protocol Buffers lub Thrift.
- Integracja na podstawie Boost.Python
IPC i rozwiązania RPC wydaje się dobre, ale muszę napisać wielkie owijarki, aby uzyskać funkcjonalność z punktu 1. Z drugiej strony znalazłem żadnej informacji na temat korzystania z doładowania. Python w demonie C++ i nie wiem, czy to nawet możliwe.
Dziękuję, demon C++ musi być napisany w C++, ale po jakimś dochodzeniu natknąłem się na pomysł, nie musi to być demon - można go zapisać jako zestaw bibliotek używanych przez Pythona za pomocą 'Cython' /' Boost.Python'. Część C++ to kompilator pod maską, który kompiluje wykres do jakiegoś binarnego kodu maszynowego. Myślę, że znalazłem rozwiązanie - sprawienie, że demon Python, który wywoływałby niektóre funkcje z moich bibliotek C++ przy użyciu 'Cython' jest bardzo dobrym rozwiązaniem. –
Zgadzam się. Ogólnie jest to najlepsza możliwa opcja: implementować ogólną logikę sterującą w Pythonie i dostarczać rzeczy, których nie można wykonać w Pythonie jako moduły rozszerzeń zaimplementowane w C++. – Ellioh