调用PyEval_CallObject时程序关闭

2024-09-24 22:19:11 发布

您现在位置:Python中文网/ 问答频道 /正文

当python脚本调用python/object时,调用python脚本时关闭。在

C侧代码:

    static PyObject *register_inactivity_callback(PyObject *self, PyObject *args)
{
    PyObject *temp;

    if (!PyTuple_Check(args) || PyTuple_Size(args) < 0)
    {
        fprintf(stderr, "invalid input parameter\n");
        Py_RETURN_NONE;
    }

    temp = PyTuple_GetItem(args, 0);
    if (!PyCallable_Check(temp))
    {
        fprintf(stderr, "parameter must be callable\n");
        Py_RETURN_FALSE;
    }
    Py_XINCREF(temp);
    Py_XDECREF(inactivity_callback);
    inactivity_callback = temp;

    Py_RETURN_TRUE;
}

void inactivity_callback_internal(void *arg)
{
    PyObject *arglist;
    struct input_event *event = (struct input_event *)arg;

    if (inactivity_callback && event)
    {
        arglist = Py_BuildValue("()");
        PyEval_CallObject(inactivity_callback, arglist);
        Py_DECREF(arglist);
    }
}

Python方面:

^{pr2}$

我在ubuntu桌面平台上测试了这段代码并测试了它的工作情况,但当我转到ARM时,程序开始在PyEval_CallingObject上崩溃/关闭。在

我在密码里有什么可疑的吗? 提前谢谢。在


Tags: 代码py脚本eventinputreturnifcheck
1条回答
网友
1楼 · 发布于 2024-09-24 22:19:11

我找到了根本原因。PyEval_CallObject函数需要由PyGILState_sure/Release函数包装。请参见http://docs.python.org/2/c-api/init.html(非Python创建的线程)。在

gstate = PyGILState_Ensure();
PyEval_CallObject(inactivity_callback, arglist);
PyGILState_Release(gstate);

相关问题 更多 >