다음 비단뱀 embedding/extending tutorial 내가 내 programm에의 할당을 실행할 때 코드가 잘 (내가 스테판 T. Lavavej에 의해 64 native mingw toolchain를 사용 g++ -std=c++11 main.cpp -lpython33.64 -lboost_filesystem -lboost_system -s
사용) 아직 때문에 컴파일 코드를embeding 확장 파이썬은 모든 메모리를 먹는
#include <boost/filesystem.hpp>
#include <Python.h>
static PyObject *
spam_system(PyObject *self, PyObject *args) {
const char *command;
int sts;
if (!PyArg_ParseTuple(args, "s", &command))
return NULL;
sts = system(command);
return PyLong_FromLong(sts);
}
static char SpamModuleName[] = "spam\000";
int main(int argc, char const *argv[]) {
Py_SetPath((
boost::filesystem::canonical("./python_lib.zip").wstring()
).c_str());
PyImport_AppendInittab(SpamModuleName,[](){
static PyMethodDef SpamMethods[] = {
{"system", spam_system, METH_VARARGS, "Execute a shell command."},
{NULL, NULL, 0, NULL}
};
static struct PyModuleDef spammodule = {
PyModuleDef_HEAD_INIT,
SpamModuleName,
NULL,
-1,
SpamMethods,
NULL, NULL, NULL, NULL
};
return PyModule_Create(&spammodule);
});
Py_Initialize();
PyRun_SimpleString(
"import spam\n"
"status = spam.system(\"ls -l\")\n"
);
Py_Finalize();
return 0;
}
을 다음과 같이 와서 동안 약 4 기가 램과 (procexp screenshot)의 PyRun_SimpleString("import spam\n")
에 100 % cpu 사용이 있고 종종 이무기와 충돌합니다. MemoryError
.
PyImport_ImportModule(SpamModuleName);
또한 많은 메모리를 할당 한 후에도 프로그램을 중단시킵니다 (사실이 함수로 성공한 프로그램을 실행하지 못했습니다).
다른 모든 프로그램을 끝내고 가능한 많은 RAM을 없애면 프로그램이 제대로 실행되고 예상되는 출력이 나오지만 리소스를 줄이면 성능이 떨어집니다. 왜 내가 잘못했는지/파이썬이 많은 자원을 사용하게 만드는 이유는 무엇입니까?
편집와 Mingw-W64의 IRC에 대한 토론 후 나는 일하고 다른 사람이 사용자 alexey
및 ktietz
내가 있었다에서 내 자리에 광범위한 도움을
관련 http://stackoverflow.com/questions/3778370/python-extensions-for-win64-via-gcc – Valerij