【问题标题】:How to handle a segmentation fault occurred in python如何处理python中发生的分段错误
【发布时间】:2019-12-13 16:26:31
【问题描述】:

我已经编写了一段代码,用于检查系统中是否存在数据库中的新条目,如果找到新条目,它将获取数据并且客户端将尝试将其发送到服务器...但是如果在每次执行 threading.timer 周期时不断发现数据,它将尝试将其发送到服务器...

现在的问题是如果服务器无法访问,那么它将打印该服务器不活动等。如果这个循环持续几分钟,脚本就会崩溃并显示分段错误......我想处理这个异常并想要如果发生分段错误,则处理某些事情

工作环境: linux 蟒蛇3 sql-server

编辑

这是脚本崩溃后显示的内容...

Fatal Python error: Segmentation fault

Thread 0xb3dff460 (most recent call first):

File "/usr/lib/python3.4/threading.py", line 294 in wait File "/usr/lib/python3.4/threading.py", line 553 in wait File "/usr/lib/python3.4/threading.py", line 1184 in run File "/usr/lib/python3.4/threading.py", line 920 in _bootstrap_inner File "/usr/lib/python3.4/threading.py", line 888 in _bootstrap

Current thread 0xb33ff460 (most recent call first):
  File "abc.py", line 343 in send_to_server
  File "abc.py", line 244 in sql_connect1
  File "/usr/lib/python3.4/threading.py", line 1186 in run
  File "/usr/lib/python3.4/threading.py", line 920 in _bootstrap_inner
  File "/usr/lib/python3.4/threading.py", line 888 in _bootstrap

Thread 0xb45ff460 (most recent call first):
  File "abc.py", line 408 in send_to_server
  File "abc.py", line 244 in sql_connect1
  File "/usr/lib/python3.4/threading.py", line 1186 in run
  File "/usr/lib/python3.4/threading.py", line 920 in _bootstrap_inner
  File "/usr/lib/python3.4/threading.py", line 888 in _bootstrap

Thread 0xb4fff460 (most recent call first):
  File "abc.py", line 343 in send_to_server
  File "abc.py", line 244 in sql_connect1
  File "/usr/lib/python3.4/threading.py", line 1186 in run
  File "/usr/lib/python3.4/threading.py", line 920 in _bootstrap_inner
  File "/usr/lib/python3.4/threading.py", line 888 in _bootstrap

Thread 0xb6f39300 (most recent call first):
  File "/usr/lib/python3.4/threading.py", line 1076 in _wait_for_tstate_lock
  File "/usr/lib/python3.4/threading.py", line 1060 in join
  File "/usr/lib/python3.4/threading.py", line 1294 in _shutdown
Segmentation fault

【问题讨论】:

  • 分段错误通常是从 ODBC 驱动程序代码中引发的,而不是从 pyodbc 代码本身引发的。您使用的是哪个 ODBC 驱动程序?
  • @GordThompson code [FreeTDS] 描述 = FreeTDS unixODBC Driver Driver = /usr/lib/arm-linux-gnueabihf/odbc/libtdsodbc.so code
  • @GordThompson Pyodbc 版本是:--- 名称:pyodbc 版本:4.0.26 位置:/usr/local/lib/python3.4/dist-packages 我搜索了更多,发现 4.0 版本有这个分段错误的问题吗?还请确认这一点并建议现在如何解决此问题..

标签: python-3.x multithreading sockets client-server pyodbc


【解决方案1】:

很难说,但是:

  • 您使用的是 python3.4,但我们不知道确切的版本,因此升级到 3.4 的最新版本(或者更好,升级到 3.6 或 3.7)可能会有所帮助。
  • 我们也不知道您使用的是什么版本的 pyodbc。也许这个错误已经解决了。但是有several seg fault reported in github
  • 我们看不到您是代码。也许您错误地使用了驱动程序(不明白为什么但是......)

【讨论】:

  • 你知道Segmentation fault的异常处理吗?如果是这样,请向我证明一些例子。
  • 分段错误通常意味着 Python 崩溃/某个模块导致 Python 崩溃。你不能用异常处理程序来捕捉它。解决错误代码或升级依赖项/Python。
【解决方案2】:

好吧,我什至不知道分段错误是可能的,分段错误意味着您在内存中走得太远到未映射的地方。 您应该记下最初发生问题的那一行并检查这些行。

【讨论】:

  • 这是可能的,因为pyodbc 是用 python 和 C++ 编写的。所以段错误一定是c++代码。
  • @AldricLiottier 我没有创建分段错误.. 它存在于这个宇宙中
猜你喜欢
  • 2018-11-18
  • 2021-05-20
  • 1970-01-01
  • 1970-01-01
  • 2014-04-10
  • 1970-01-01
  • 1970-01-01
  • 2018-10-08
相关资源
最近更新 更多