从线程调用PyObject_调用会导致堆栈溢出 我尝试使用绝地来创建一个定制的Python编辑器,我使用C++,它工作得很好,但是它有点慢,而且在一段时间内停滞,所以我在C++中的线程中调用这些函数,但是这样做有时会有堆栈溢出错误。
这是我的密码:从线程调用PyObject_调用会导致堆栈溢出 我尝试使用绝地来创建一个定制的Python编辑器,我使用C++,它工作得很好,但是它有点慢,而且在一段时间内停滞,所以我在C++中的线程中调用这些函数,但是这样做有时会有堆栈溢出错误。,python,c++,unreal-engine4,jedi-vim,Python,C++,Unreal Engine4,Jedi Vim,这是我的密码: //~ Create Script Instance class PyObject* pScript = PyObject_Call( PyObject_GetAttrString(GetJediModule(), "Script"), PyTuple_Pack(1, PyString_FromString(TCHAR_TO_UTF8(*Source
//~ Create Script Instance class
PyObject* pScript = PyObject_Call(
PyObject_GetAttrString(GetJediModule(), "Script"),
PyTuple_Pack(1, PyString_FromString(TCHAR_TO_UTF8(*Source))),
NULL);
if (pScript == NULL)
{
UE_LOG(LogTemp, Verbose, TEXT("unable to get Script Class from Jedi Module"));
Py_DECREF(pScript);
ClearPython();
return;
}
//~ Call complete method from Script Class
PyObject* Result = PyObject_Call(
PyObject_GetAttrString(pScript, "complete"),
PyTuple_Pack(2, Py_BuildValue("i", Line), Py_BuildValue("i", Offset)),
NULL);
if (Result == NULL)
{
UE_LOG(LogTemp, Verbose, TEXT("unable to call complete method from Script class"));
Py_DECREF(Result);
ClearPython();
return;
}
调用PyObject_call时出错,我假设是因为线程,因为当我从主线程调用函数时,它工作正常,但是堆栈没有告诉我任何有用的东西,只是python.dll中的一个错误,当我在UE中启动我的线程时,可以选择堆栈大小,我使用了一个1024的超小值,我做了一个小的修改,我已经测试了3个小时,没有崩溃,所以我想现在可以安全地假设它正在工作 下面是如何设置堆栈大小,第三个参数是堆栈大小:
Thread = FRunnableThread::Create(this, TEXT("FAutoCompleteWorker"), 8 * 8 * 4096, TPri_Normal);
谢谢你找到这个!绝地武士确实需要一个具有一定大小的堆栈,因为它经常使用递归。