通过C++桥从 .NET 调用 Python
Calling Python from .NET via C++ bridge
几个月,当我太累了,无法重新发明/移植东西并在Python中找到一些很酷的代码时,我会在谷歌上搜索"从.NET调用Python"。两种流行的解决方案是启动外部进程或使用IronPython。
IronPython对我来说不是一个选择,因为我可能想要使用Python的原因通常是一些依赖于NumPy/ScyPy的库。
最近我开始学习C++的基础知识,发现可以在C++中嵌入Python,并找到了一篇带有示例的文章。
通过 P/Invoke 从 .NET 调用C++非常容易。所以我的方案是使用来自 .NET 的数据调用一些 Python 脚本并返回结果。
在我开始深入挖掘之前,我想问一下是否有人尝试过这种方法,这是否可行或有更好的方法?
具体说来
- 所有 Python 库在嵌入时都能工作吗,例如 NumPy、ScyPy、Pandas、PyMC 等?
- 嵌入式 Python 是否会以与标准C++相同的方式与 C++/CLI 一起工作?
- 如何将复杂数据传递给 Python:序列化为 JSON 还是类型之间存在映射?
性能是一个问题:主要用例是在实时数据的滑动窗口上做一些数值工作。我认为外部过程对于频繁的呼叫来说非常慢 - 如果我错了,请纠正我?
使用过一次:-
有一个 C# dll 我需要从中查询数据。因此,我开发了C++/CLI 模块来与该 dll 进行交互,并处理了一些与该数据对应的委托和事件。然后C++模块将接受这些数据,对其进行处理并将其发送到python模块。
python和c++之间的差距是用zmq(替换普通套接字)和谷歌协议缓冲区(序列化和反序列化机制)来填补的。python 要做的只是将请求发送到C++然后将其传输到 C++/CLI 模块,该模块在获取数据时将通过 zmq 推送到 python...
单独的线程中生成一个 python 实例作为处理服务器 - 您可以使用消息将数据传递到它并从它传回,如果你的耦合是松散的,这可以比外部调用工作得更好,并且本质上意味着你的数字处理在 GUI 的单独内核上。您还将跳过为每个调用加载新进程所固有的处理时间。
- 从C++调用 Python 并访问通过 Anaconda 安装的软件包
- 使用C++指针调用 python 函数
- 使用 pybind11 调用 Python 函数时避免复制输入数据
- 从C++调用 Python 脚本以持续流式传输数据
- 通过std::system调用python时出错
- 用c++调用python程序
- 在 C 代码中调用 Python 函数时第三次出现访问冲突写入位置错误
- 如何分发调用Python C++应用程序?
- 有没有办法用c ++ Gsoap客户端调用python soap spyne服务器?
- 使用来自C++的任意数量的参数(在编译时未知)调用 Python 函数
- 如何从 c++ 调用 python
- 从C++调用 Python 或 Lua 来计算表达式,仅在需要时计算未知变量
- 使用Tensorflow/Bazel从C++调用Python时出现链接错误
- 如何避免在Qt项目中调用Python脚本时出现分段错误
- 如何在C++环境中使用 Tensorflow 库调用 python 文件
- 从C++调用 Python 类方法,如果给定一个初始化的类作为 PyObject
- 使用 pybind11 从 C++ 调用 Python 函数
- 从C 中的多个线程调用Python函数
- numpy.core.multiarray在通过Xcode中开发的C 应用程序调用Python模块时未能导入
- 在QT Creator中使用C++调用Python脚本