2017-03-05 57 views
0

我有一個C++應用程序,我必須提供一些面向網絡的功能,如OAuth2,並使用一些常用服務的REST API。以下是我的想法:將Python嵌入到C++應用程序中是否明智?

  • 我正在研究的過程(產品的一個功能)主要是網絡有界的。因此,性能下降並不明顯。

  • 在Python中實現簡單的API調用相關腳本比C++更簡單,並且從長遠來看更易於維護。

  • 在C++中有可用於REST,OAuth2的庫,但Python很容易工作,並且可以使用libpython與C++接口。 https://docs.python.org/2/extending/embedding.html

  • 該項目在C++和Qt5中已經有了很大的代碼庫。

這裏有一些問題,我很擔心:

  • 它是一個很好的建議去實現一個混合語言的方法,即使所有的功能在C++中是可用的,只是爲了避免複雜? (請不要將這個問題標記爲徵求意見,我尋求合理的論點)。

  • 與Python中的C++相比,是否存在主要的性能下降或者我對任務進行網絡綁定的假設,這使得CPU時間無關緊要。

  • 在使用libpython在不同平臺上構建整個代碼庫時是否存在嚴重問題?

  • 該項目基本上是進程綁定,因此無法移植到Python。此外,它的巨大和移植將比在C++中執行復雜的事情花費更多。它只是需要在線交互的軟件的特定部分。

+2

爲什麼不從C++完全切換到Python,如果它更容易使用Python並且它具有代碼中使用的所有庫?如果你認爲Python很慢:你確定你的程序在CPU使用率方面必須很快,還是I/O限制?如果後者是真的,那麼你可以很好地使用Python。 – ForceBru

+0

已編輯。最後我添加了一點。 –

回答

2

混合語言是許多項目和產品,如遊戲引擎,3D建模工具,甚至MS辦公室很好的驗證想法。

如果您對性能下降不敏感,並且您可以從低維護成本中受益,那麼這將是一個好主意。

但是您需要考慮的一些事情是部署和調試工作,無論它是否會受到混合的影響;混合建築師也可能會遇到一些問題,以找到合適的候選人來維護他們是否擁有它離開公司。您也可以首先使用Python作爲網絡模塊啓動項目,如果您擁有里程碑,則會遇到里程碑,並且一旦您獲得足夠的時間後再切換到C++,或者找到性能損失。

一旦我在一家遊戲公司工作過,服務器和客戶端都是混合語言項目。 C++中的服務器框架,而遊戲邏輯,在Lua中與AI作戰;客戶端通過使用UnrealEngine3,C++中的圖形和框架,但Game Logic使用虛幻腳本。他們都很棒。