首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python PyEnchant分段错误或指针无效

Python PyEnchant分段错误或指针无效
EN

Stack Overflow用户
提问于 2012-08-10 06:26:52
回答 1查看 699关注 0票数 3

我有一个多线程Python应用程序,它调用PyEnchant。我不是Python专家,大部分代码来自第三方。我所做的是添加代码以从多线程应用程序调用PyEnchant。由于我做了更改,应用程序运行了不同的时间长度,然后崩溃。我在Ubuntu 12.04上运行它。我得到的错误如下:

代码语言:javascript
复制
Program received signal SIGSEGV, Segmentation fault.
[Switching to Thread 0x7fffc5ffd700 (LWP 6858)]
0x00007ffff4424854 in ?? () from /usr/lib/libenchant.so.1
(gdb) backtrace
#0  0x00007ffff4424854 in ?? () from /usr/lib/libenchant.so.1
#1  0x00007ffff442517d in enchant_dict_check () from /usr/lib/libenchant.so.1
#2  0x00007ffff48a2ea4 in ffi_call_unix64 () from /usr/lib/python2.7/lib-dynload/_ctypes.so
#3  0x00007ffff48a28c5 in ffi_call () from /usr/lib/python2.7/lib-dynload/_ctypes.so
#4  0x00007ffff48932c2 in _ctypes_callproc () from /usr/lib/python2.7/lib-dynload/_ctypes.so
#5  0x00007ffff4893aa2 in ?? () from /usr/lib/python2.7/lib-dynload/_ctypes.so
#6  0x00000000004c7c76 in PyObject_Call ()
#7  0x000000000042aa4a in PyEval_EvalFrameEx ()
#8  0x000000000042abe2 in PyEval_EvalFrameEx ()
#9  0x000000000042abe2 in PyEval_EvalFrameEx ()
#10 0x00000000004317f2 in PyEval_EvalCodeEx ()
#11 0x000000000054aa40 in ?? ()
#12 0x00000000004c7c76 in PyObject_Call ()
#13 0x000000000049e9ba in ?? ()
#14 0x00000000004c7c76 in PyObject_Call ()
#15 0x00000000004c7d36 in PyEval_CallObjectWithKeywords ()
#16 0x0000000000443e3a in ?? ()
#17 0x000000000042a862 in PyEval_EvalFrameEx ()
#18 0x000000000042abe2 in PyEval_EvalFrameEx ()
#19 0x000000000042abe2 in PyEval_EvalFrameEx ()

代码语言:javascript
复制
*** glibc detected *** /usr/bin/python: free(): invalid pointer: 0x00007fffd4000178 ***
(gdb) backtrace
#0  0x00007ffff68fa445 in raise () from /lib/x86_64-linux-gnu/libc.so.6
#1  0x00007ffff68fdbab in abort () from /lib/x86_64-linux-gnu/libc.so.6
#2  0x00007ffff6937e2e in ?? () from /lib/x86_64-linux-gnu/libc.so.6
#3  0x00007ffff6942626 in ?? () from /lib/x86_64-linux-gnu/libc.so.6
#4  0x00007ffff4424861 in ?? () from /usr/lib/libenchant.so.1
#5  0x00007ffff442517d in enchant_dict_check () from /usr/lib/libenchant.so.1
#6  0x00007ffff48a2ea4 in ffi_call_unix64 () from /usr/lib/python2.7/lib-dynload/_ctypes.so
#7  0x00007ffff48a28c5 in ffi_call () from /usr/lib/python2.7/lib-dynload/_ctypes.so
#8  0x00007ffff48932c2 in _ctypes_callproc () from /usr/lib/python2.7/lib-dynload/_ctypes.so
#9  0x00007ffff4893aa2 in ?? () from /usr/lib/python2.7/lib-dynload/_ctypes.so
#10 0x00000000004c7c76 in PyObject_Call ()
#11 0x000000000042aa4a in PyEval_EvalFrameEx ()
#12 0x000000000042abe2 in PyEval_EvalFrameEx ()
#13 0x000000000042abe2 in PyEval_EvalFrameEx ()
#14 0x00000000004317f2 in PyEval_EvalCodeEx ()
#15 0x000000000054aa40 in ?? ()
#16 0x00000000004c7c76 in PyObject_Call ()
#17 0x000000000049e9ba in ?? ()
#18 0x00000000004c7c76 in PyObject_Call ()
#19 0x00000000004c7d36 in PyEval_CallObjectWithKeywords ()
#20 0x0000000000443e3a in ?? ()
#21 0x000000000042a862 in PyEval_EvalFrameEx ()
#22 0x000000000042abe2 in PyEval_EvalFrameEx ()

代码语言:javascript
复制
Program received signal SIGSEGV, Segmentation fault.
[Switching to Thread 0x7fffe57fa700 (LWP 17532)]
0x0000000000000000 in ?? ()
(gdb) backtrace
#0  0x0000000000000000 in ?? ()
#1  0x00007ffff3f5fe33 in g_hash_table_lookup () from /lib/x86_64-linux-gnu/libglib-2.0.so.0
#2  0x00007ffff44245a3 in ?? () from /usr/lib/libenchant.so.1
#3  0x00007ffff442518b in enchant_dict_check () from /usr/lib/libenchant.so.1
#4  0x00007ffff48a2ea4 in ffi_call_unix64 () from /usr/lib/python2.7/lib-dynload/_ctypes.so
#5  0x00007ffff48a28c5 in ffi_call () from /usr/lib/python2.7/lib-dynload/_ctypes.so
#6  0x00007ffff48932c2 in _ctypes_callproc () from /usr/lib/python2.7/lib-dynload/_ctypes.so
#7  0x00007ffff4893aa2 in ?? () from /usr/lib/python2.7/lib-dynload/_ctypes.so
#8  0x00000000004c7c76 in PyObject_Call ()
#9  0x000000000042aa4a in PyEval_EvalFrameEx ()
#10 0x000000000042abe2 in PyEval_EvalFrameEx ()
#11 0x000000000042abe2 in PyEval_EvalFrameEx ()
#12 0x00000000004317f2 in PyEval_EvalCodeEx ()
#13 0x000000000054aa40 in ?? ()
#14 0x00000000004c7c76 in PyObject_Call ()
#15 0x000000000049e9ba in ?? ()
#16 0x00000000004c7c76 in PyObject_Call ()
#17 0x00000000004c7d36 in PyEval_CallObjectWithKeywords ()
#18 0x0000000000443e3a in ?? ()
#19 0x000000000042a862 in PyEval_EvalFrameEx ()
#20 0x000000000042abe2 in PyEval_EvalFrameEx ()
#21 0x000000000042abe2 in PyEval_EvalFrameEx ()
#22 0x000000000042abe2 in PyEval_EvalFrameEx ()

读了另一篇我试过的文章

代码语言:javascript
复制
ulimit -s unlimited

以及ulimit的其他各种值,但似乎没有帮助。

我已经监控了使用"top“运行的应用程序,它似乎没有占用太多资源。它有时运行5分钟,有时运行15分钟。在这些运行期间,它处理数百个字符串,并找到数百个未登录的单词。运行代码的机器没有任何已知的问题,它是我的开发机器,其他一切都运行得很稳定。

有没有人能解释这些错误的含义?在我的Python代码中,有什么我应该做或不应该做的事情可以解决这个问题吗?我猜这是一个内存问题(我对此知之甚少),我是否应该检查内存泄漏等?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-08-13 05:13:21

我做了更多的测试,发现它在单个工作线程上工作得很好。经过一些谷歌搜索,我发现http://aspell.net/在“需要做的事情”下面写了:“让Aspell线程安全。即使Aspell本身不是多线程的,我也希望它是线程安全的,这样它就可以被多线程程序使用。”我通过Enchant使用了PyEnchant的拼写,所以我猜我看到的是可以预期的。我联系了Enchant http://www.abisource.com/projects/enchant/的作者,他们说"Enchant本身就是线程安全的。不幸的是,它的一些后端可能不是,就像你在Aspell中发现的那样。这是我们可以在Enchant中解决的问题,我们可以通过序列化对Aspell字典的所有访问,从而对用户隐藏线程不安全。“我能提交一个增强请求吗。因此,我已经提交了增强请求,并期待在适当的时候进行增强。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11892891

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档