我正在尝试在python中包装一个c通信库,当我尝试处理大量数据时遇到了一些麻烦。以下代码适用于较小的消息,但当消息大于400MB时,我从PyObject_CallFunction调用中得到以下错误:
python.exe中0x1e00d65f处的未处理异常:0xC0000005:访问冲突写入位置0x0000000c。
int request_callback(c_request* req, c_msg* msg, void* client)
{
PyGILState_STATE gstate;
PyObject* callback;
PyObject* result;
unsigned int request_addr;
PyObject* py_request_addr;
PyObject* message;
gstate = PyGILState_Ensure();
request_addr = (unsigned int)req;
py_request_addr = PyInt_FromLong(request_addr);
if (PyDict_Contains(request_callback_dict, py_request_addr) == 1)
{
callback = PyDict_GetItem(request_callback_dict, py_request_addr);
message = PyString_FromStringAndSize(msg->data, msg->len);
result = PyObject_CallFunction(callback, "O", message);
}
PyGILState_Release(gstate);
return 0;
}
有关可能导致此问题的任何想法。感谢。
答案 0 :(得分:0)
进一步调试代码之后,实际上使用字符串的python代码存在问题。该字符串是一个谷歌协议缓冲区,当从文件写入数据并解析字节时,我可以捕获库引发的python异常。