美文网首页程序员
Python 中死锁问题定位

Python 中死锁问题定位

作者: DragonKid | 来源:发表于2017-03-27 16:36 被阅读0次

    大致思路:

    python 运行过程中会产生调用栈,当线程死锁时,栈信息就会停留在线程死锁的那一刻,通过查看此时的栈信息,就可以找到导致线程死锁的具体位置。

    打印调用栈的核心代码如下:

    def stacktraces(exclude=()):
        code = []
        current_frames = [(key, value) for key, value in sys._current_frames().items() if key not in exclude]
        for threadId, stack in current_frames:
            code.append("\n# ThreadID: %s" % threadId)
            for filename, lineno, name, line in traceback.extract_stack(stack):
                code.append('File: "%s", line %d, in %s' % (filename, lineno, name))
                if line:
                    code.append("  %s" % (line.strip()))
        stackinfo = highlight("\n".join(code), PythonLexer(), HtmlFormatter(
            full=False,
            # style="native",
            noclasses=True,
        ))
        return str(datetime.now()) + ('<p>\nthreadnums: %r</p>' % len(current_frames)) + stackinfo
    

    这段代码可以打印出一段可读性较强的栈信息,只需要再再外层简单封装,令其每隔一段时间打印并记录下当前栈信息就可以有效定位出线程死锁的具体位置。

    相关文章

      网友评论

        本文标题:Python 中死锁问题定位

        本文链接:https://www.haomeiwen.com/subject/laprottx.html