我用python编写了一个应用程序,另一个用c ++编写。在python应用程序的中间我需要运行c ++应用程序传递一些输入并接收输出。我已经知道我可以使用子进程从python调用c ++应用程序但是因为c ++应用程序每次调用时都必须进行一些初始计算,这使得我的程序非常慢。所以我在寻找的是:
将我的c ++应用程序置于无限循环中并保持运行。然后在我的python应用程序中,每当我需要调用c ++应用程序时,只需传递数据并获取输出。这样我每次需要拨打电话时都可以避免重复初始状态。
有没有这样做?就像编写另一个控制所有这些的应用程序一样此外,可能有多个python应用程序运行的实例,但我想只运行一个c ++应用程序,因为它占用了大量内存
答案 0 :(得分:3)
使用subprocess.Popen可以打开一个进程并保持打开状态,使用stdin和stdout与之进行通信。当您打开进程时使用:stdout = subprocess.PIPE,stdin = subprocess.PIPE。
然后,您可以写入process.stdin并从process.stdout读取c ++程序的输出。
答案 1 :(得分:0)
你可以用boost python做到这一点。设计一个在其构造函数中执行初始计算的类和一个执行计算的方法。你将它包装起来并从python中实例化一次。
asprocess解决方案也是可行的,就像asafpr回答的那样。
您还可以在C ++应用程序中设置XML-RPC服务器,并使用xmlrpclib模块从Python调用它。