首先举一个简单的例子来说明这种情况。首先是已编译成可执行文件的源.cpp:
#include <iostream>
using std::cout;
using std::endl;
int main()
{
cout << "Hello World!" << endl;
return 0;
}
此文件已被制作成exe。现在在python中,它被调用如下:
import subprocess
import sys
sys.path.append('C:\Foo\Bar')
output = subprocess.Popen("hello_world.exe", stdout=subprocess.PIPE)
print output.stdout.read()
因此,这适用于调用可执行文件并从标准输出返回输出。问题是,是否有任何可行的方法来执行此操作以返回潜在的大型数组?从我的理解,这基本上就像返回和阅读文本文件,这将是非常慢的!虽然我知道SWIG或Cython是用C ++扩展python的选项,但我会发现每个函数的单独可执行文件更有条理和模块化!
TLDR:你能以合理的速度将大型数组从可执行文件返回到python吗?或者用Cython / SWIG / ctypes扩展是唯一的方法吗?
答案 0 :(得分:1)
您有两种选择。
在第一种情况下,输出必须适合ram,否则会发生非常糟糕的事情。在第二种情况下,您可以设置缓冲区大小,然后您的子进程应该暂停,直到您从缓冲区读取它将再次继续。
cython / swig等等不做任何事情来减少内存占用。如果这是内存绑定,那么你很可能想要使用python并逐步读/写磁盘。 Python在传递内存方面非常有效(即除非你告诉它这样做,否则它不会做七十七个内存副本。)