-1

我用python编写了一个应用程序,另一个用c ++编写了应用程序。在 python 应用程序的中间,我需要运行 c++ 应用程序,将一些输入传递给它并接收输出。我已经知道我可以使用 subprocess 从 python 调用 c++ 应用程序,但是由于该 c++ 应用程序每次调用时都必须进行一些初始计算,这使得我的程序非常慢。所以我一直在寻找的是:

将我的 c++ 应用程序置于无限循环中并保持运行。然后在我的 python 应用程序中,每当我需要调用 c++ 应用程序时,只需传递数据并获取输出。这样我就可以避免每次需要进行此调用时重复初始状态。

有没有办法做到这一点?就像编写另一个控制所有这些的应用程序一样。也可以运行多个 python 应用程序实例,但我只想运行一个 c++ 应用程序,因为它需要大量内存

4

2 回答 2

3

使用 subprocess.Popen 您可以打开一个进程并使其保持打开状态,使用标准输入和标准输出与之通信。当您打开进程使用: stdout=subprocess.PIPE, stdin=subprocess.PIPE 。
然后,您可以写入 process.stdin 并从 process.stdout 读取 c++ 程序的输出。

于 2013-09-16T07:17:31.903 回答
0

你可以用 boost python 来做到这一点。设计一个在其构造函数中执行初始计算的类和一个执行计算的方法。您将其包装并从 python 实例化一次。

正如 asafpr 回答的那样,子流程解决方案也是可能的。

您还可以在 C++ 应用程序中设置 XML-RPC 服务器,并使用 xmlrpclib 模块从 Python 调用它。

于 2013-09-16T10:10:00.227 回答