2

我有一个用 C++ 编写的程序,带有一个用于 RPC 的 Web 界面。我可以调用http://localhost/ListVariableshttp://localhost/RunFunction?var=1让 C 代码执行 ListVariables 或 RunFunction。它可以工作,但是当有这么多优秀的 Python Web 服务器时,我宁愿不必在 C/C++ 中管理 Web 服务器。

我想象的是让 C 程序调用 Python 以在另一个线程(即 Tornado)上启动 Web 服务器,返回到 C,然后继续进行计算。然后,当 Python 服务器收到 on 请求时http://localhost/ListVariables,它会回调C 并在已经运行的进程上执行 ListVariables。

C -----> processing -----------> processing ------------> RPC: FuncA -------->
 |                                                        ^        |
  \---> Python Web Server ---------- Request for: FuncA --/   ...   \-------->
                                     ^
  browser: http://localhost/FuncA ---/

该项目有一个不幸的警告,即程序必须从 C 开始。在做了一些研究之后,这似乎有点边界情况,因为 Python-->C 和 C-->Python 可以用 Cython 完成。但是,我在 C-->Python-->C 上找不到很多资源,因为我发现的大多数示例都描述了链接到库而不是链接到已经运行的进程。是否可以让 Python 回调到正在运行的 C 程序中?

4

2 回答 2

1

绝对地。在注入的 C 程序中创建一个“假”模块sys.modules,Python 代码可以像任何其他模块一样导入和访问该模块。

于 2012-10-23T03:13:12.917 回答
0

我个人非常喜欢 boost::python 库,用于将 python 嵌入到 c++ 中并处理两者之间的数据绑定和回调。http://www.boost.org/doc/libs/1_51_0/libs/python/doc/

话虽这么说,你的提议听起来有点像 PITA。我个人在使用http://libevent.org/来满足我的嵌入式网络服务器需求方面取得了很大的成功。它为你处理所有的http服务器的东西,你需要做的就是给它你想要处理的url和一个回调,把它event_base_loop放在你的主循环中(或者如果你愿意的话,放在它自己的线程中),然后你走吧。在我看来,这似乎比嵌入 python 和处理两者之间传递的数据和数据结构要容易得多。

于 2012-10-23T03:24:48.643 回答