부스트 파이썬을 통해 파이썬 메소드가 호출 된 후 실행중인 파이썬 인터프리터를 중지 할 수있는 방법이 있습니까 C++ 내에 있습니까?부스트 파이썬 : 인터프리터를 중지하십시오
나는이 이유를 위해 전화를 중단 할 :
- 시간 제한 기간이 만료 된 경우 (즉, 스크립트는 "너무 오래"실행).
- 다른 (병렬 실행중인) Python 스크립트가 실패한 경우. "
아무것도를 설정하지만, 다른 한편으로는 내가 가끔 부스트 문서의 오른쪽 단락을 찾기 위해 투쟁하지 않은 웹 및 부스트 문서의 내 검색 ...
만 아이디어의 일종 "나는 이것을 StackOverflow question에서 얻었다. 아이디어는 스크립트에 신호를 보내는 것이지만, C++ 프로세스 내에서 인터프리터가 실행되기 때문에 가능한 옵션이 아닐까요?!
내가 뭐하는 거지 다음
const boost::filesystem::path pythonScriptPath = /* Path to the script I want to execute a function from. */
const std::string pythonFunctionName = /* Name of the Python function to call. */;
boost::python::object mainModule = boost::python::import("__main__");
boost::python::object mainNameSpace = mainModule.attr("__dict__");
boost::python::dict locals;
locals["moduleName"] = pythonScriptPath.stem().string();
locals["modulePath"] = pythonScriptPath.string();
std::stringstream importModuleStream;
importModuleStream
<< "import imp\n"
<< "newModule = imp.load_module(moduleName, open(modulePath), modulePath, ('py', 'U', imp.PY_SOURCE))\n";
boost::python::exec(importModuleStream.str().c_str(), mainNameSpace, locals);
auto pythonScript = locals["newModule"];
auto pythonFunction = pythonScript_.attr(pythonFunctionName .c_str());
pythonFunction(/* args */);
지금 질문은 다음과 같습니다
내가 그것을 트리거 후 /이 pythonFunction()의 실행을 중지 중단 할 수 있습니까? 내가 호출하는 방법이 가능하지 않다면 Boost Python으로 파이썬 함수를 호출하는 또 다른 방법이 있습니까? 은 통화를 중단 할 수 있습니까?
저는 리눅스에서 실행되고 있습니다 (일부 플랫폼 종속적 인 솔루션을 사용할 수있는 경우에 대비해 완전히 멋진 것입니다).
'os._exit (1)'을 중단 함수에 넣지 않는 이유는 무엇입니까? 'os._exit (1)'은 엔트리 포인트 컨텍스트 (즉, 중단되기를 기다리는 스레드로부터의)에서 호출되는 경우에만 작동합니까? –
@ peschü : 예, (C++) 스레드에서 직접'os._exit (1) '을 호출 할 수 있다고 생각합니다. 나는 인터프리터를 더 정상적으로 멈추고 전체 프로세스 (C++ 프레임 포함)를 종료하려고했던 이전 접근법에서 여분의 스레드가 생겼다고 생각한다. 그것이 "다른 (비슷한) 접근법"이 성취하려고 시도한 것입니다. 파이썬 코드가 멈추는 동안 C++ 응용 프로그램이 계속 실행됩니다. – DrP3pp3r