Python和C++之间最基本的IPC
The most basic IPC between Python and C++
我正在用 C++ 编写 DLL(Windows,MS VS 17),它需要在某个时候调用 Python 脚本 - 它应该读取 json 编码字符串,对其进行处理并返回 json 编码的结果。不需要异步模式或 "speed of light",但我需要或多或少的快速响应——我。 e.最多 1-5 秒内以下是我考虑的方法和评论:
- 将字符串作为命令行参数传递。显然,这不是最佳选择 - 更不用说字符串长度限制了。
- 使用临时文件。在我的案例中最好避免这种做法,因为虽然每次启动我需要 运行 Python-部分通常 一次,但启动次数可能很大。
- 使用 TCP/IP 套接字(对于
localhost
)/管道 。对于这样的任务,两者似乎都太过分了——我没有不断变化的连续数据流。此外,在 Windows 中可能会很痛苦。
- 使用共享内存。共享内存将是一个不错的选择,但我找不到在 C++ 和 Python.
中使用相同段的方法
- 将 Python 部分嵌入 C++。我在这里有 2 个问题:a) Python env 应该安装在目标机器上,不是吗? b) python 脚本有一个
import
,它导入一个包,从 pip 安装,不幸的是,我无法避免它。嵌入时是否有正确的方法来处理导入?
在我的例子中,是否有一种简单的方法可以在 C++ 和 Python 之间进行互操作?
由于您的目标是 Windows,选项 (2) 是最佳选择,但请使用临时文件 CreateFile(...FILE_ATTRIBUTE_TEMPORARY)
。这是有效的共享内存(在 OS 级别,两者都由虚拟内存管理器管理)但是你得到文件语义。
我正在用 C++ 编写 DLL(Windows,MS VS 17),它需要在某个时候调用 Python 脚本 - 它应该读取 json 编码字符串,对其进行处理并返回 json 编码的结果。不需要异步模式或 "speed of light",但我需要或多或少的快速响应——我。 e.最多 1-5 秒内以下是我考虑的方法和评论:
- 将字符串作为命令行参数传递。显然,这不是最佳选择 - 更不用说字符串长度限制了。
- 使用临时文件。在我的案例中最好避免这种做法,因为虽然每次启动我需要 运行 Python-部分通常 一次,但启动次数可能很大。
- 使用 TCP/IP 套接字(对于
localhost
)/管道 。对于这样的任务,两者似乎都太过分了——我没有不断变化的连续数据流。此外,在 Windows 中可能会很痛苦。 - 使用共享内存。共享内存将是一个不错的选择,但我找不到在 C++ 和 Python. 中使用相同段的方法
- 将 Python 部分嵌入 C++。我在这里有 2 个问题:a) Python env 应该安装在目标机器上,不是吗? b) python 脚本有一个
import
,它导入一个包,从 pip 安装,不幸的是,我无法避免它。嵌入时是否有正确的方法来处理导入?
在我的例子中,是否有一种简单的方法可以在 C++ 和 Python 之间进行互操作?
由于您的目标是 Windows,选项 (2) 是最佳选择,但请使用临时文件 CreateFile(...FILE_ATTRIBUTE_TEMPORARY)
。这是有效的共享内存(在 OS 级别,两者都由虚拟内存管理器管理)但是你得到文件语义。