Python和C++; 我在C++中编写了一个DLL(Windows,MS VS 17),它需要在某个时候调用Python脚本——它应该读取JSON编码的字符串,处理它并返回JSON编码结果。不需要异步模式或“光速”,但我需要或多或少的快速响应-I。E最多1-5秒。以下是我考虑的方法和评论: 将字符串作为命令行参数传递。显然,这不是最好的选择——更不用说字符串长度限制了 使用临时文件。在我的例子中,最好避免这种做法,因为尽管每次启动通常需要运行一次Python部分,但启动的数量可能相当大 使用TCP/IP套接字(用于localhost)/pipe。对于这样一项任务来说,这两种方法似乎都有些过分——我没有不断变化的连续数据流。此外,在窗户里,这可能是一种痛苦 使用共享内存。共享内存是个不错的选择,但是我不能找到一种方法来在C++和Python中使用相同的段。 将Python部分嵌入C++。这里我有两个顾虑:a)Python环境应该安装在目标机器上,不是吗?b) python脚本有一个import,它导入一个从pip安装的包,不幸的是,我无法避免它。嵌入时是否有适当的方法处理导入 在我的情况下,有一种简单的C++与Python互操作的方法吗?< P>因为你是针对Windows的,选项(2)是最好的,但是使用临时文件 CealFeFILE(…文件FieldEx临时)< /C>。这是有效的共享内存(在操作系统级别,两者都由虚拟内存管理器管理),但您可以获得文件语义
因为您的目标是Windows,选项(2)是最好的,但是请使用临时文件Python和C++; 我在C++中编写了一个DLL(Windows,MS VS 17),它需要在某个时候调用Python脚本——它应该读取JSON编码的字符串,处理它并返回JSON编码结果。不需要异步模式或“光速”,但我需要或多或少的快速响应-I。E最多1-5秒。以下是我考虑的方法和评论: 将字符串作为命令行参数传递。显然,这不是最好的选择——更不用说字符串长度限制了 使用临时文件。在我的例子中,最好避免这种做法,因为尽管每次启动通常需要运行一次Python部分,但启动的数量可能相当大 使用TCP/IP套接字(用于localhost)/pipe。对于这样一项任务来说,这两种方法似乎都有些过分——我没有不断变化的连续数据流。此外,在窗户里,这可能是一种痛苦 使用共享内存。共享内存是个不错的选择,但是我不能找到一种方法来在C++和Python中使用相同的段。 将Python部分嵌入C++。这里我有两个顾虑:a)Python环境应该安装在目标机器上,不是吗?b) python脚本有一个import,它导入一个从pip安装的包,不幸的是,我无法避免它。嵌入时是否有适当的方法处理导入 在我的情况下,有一种简单的C++与Python互操作的方法吗?< P>因为你是针对Windows的,选项(2)是最好的,但是使用临时文件 CealFeFILE(…文件FieldEx临时)< /C>。这是有效的共享内存(在操作系统级别,两者都由虚拟内存管理器管理),但您可以获得文件语义,c++,python-3.x,windows,ipc,C++,Python 3.x,Windows,Ipc,因为您的目标是Windows,选项(2)是最好的,但是请使用临时文件CreateFile(…file\u ATTRIBUTE\u temporary)。这是有效的共享内存(在操作系统级别,两者都由虚拟内存管理器管理),但您可以获得文件语义 关于共享内存-您可以使用命名的共享内存段并将名称传递给Python脚本。不确定什么是用于共享内存的Python API。关于共享内存-您可以使用命名的共享内存段并将名称传递给Python脚本。不确定什么是用于共享内存的Python API。谢谢,小姐!如何从P
CreateFile(…file\u ATTRIBUTE\u temporary)
。这是有效的共享内存(在操作系统级别,两者都由虚拟内存管理器管理),但您可以获得文件语义 关于共享内存-您可以使用命名的共享内存段并将名称传递给Python脚本。不确定什么是用于共享内存的Python API。关于共享内存-您可以使用命名的共享内存段并将名称传递给Python脚本。不确定什么是用于共享内存的Python API。谢谢,小姐!如何从Python访问它?仅仅通过它的标准I/O功能?@JamesFrezz:是的。Python询问OS,OS在RAM缓存中有文件,因为C++代码告诉OS它是一个临时文件。因此,操作系统立即给了Python结果。我检查了这种方法,发现在当前目录中创建了一个零长度的文件——这不是什么大问题,但有点令人恼火。所以我决定使用@Andrey的建议,使用共享内存。以防万一,如果有人在处理共享内存时遇到了一个导入错误——考虑升级到Python 3.8。@ JAMESFRZZ:好吧,这取决于你在哪里创建它。毕竟,它有文件语义,其中包括一个文件路径。有一个GetTempPath
,它可能会提供一个更合适的路径。谢谢,MSalters!如何从Python访问它?仅仅通过它的标准I/O功能?@JamesFrezz:是的。Python询问OS,OS在RAM缓存中有文件,因为C++代码告诉OS它是一个临时文件。因此,操作系统立即给了Python结果。我检查了这种方法,发现在当前目录中创建了一个零长度的文件——这不是什么大问题,但有点令人恼火。所以我决定使用@Andrey的建议,使用共享内存。以防万一,如果有人在处理共享内存时遇到了一个导入错误——考虑升级到Python 3.8。@ JAMESFRZZ:好吧,这取决于你在哪里创建它。毕竟,它有文件语义,其中包括一个文件路径。有一个GetTempPath
,它可能会给出一个更合适的路径。