美文网首页程序员
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 中死锁问题定位

    大致思路: python 运行过程中会产生调用栈,当线程死锁时,栈信息就会停留在线程死锁的那一刻,通过查看此时的栈...

  • 2020-04-08数据库死锁问题排查

    在测试同学测试过程中偶然发现日志中出现异常死锁日志如下: 出现问题后,立刻定位日志,排查死锁原因。以下为排查过程,...

  • 面试刷题18:死锁是怎么产生的?如何定位修复?

    死锁是并发编程的难点问题。 大家好,我是李福春,我在准备面试,今天的问题是: 死锁是如何产生的?如何定位?如...

  • java大厂面试题整理(六)JVM常用命令和参数

    关于JVM的面试题由死锁引出。 死锁及定位 从宏观上死锁产生的原因:死锁是指两个或两个以上的进程在执行过程中,因争...

  • windbg分析临界区死锁

    介绍 多线程编程中,对于资源同步导致的死锁问题,应该是开发过程中经常碰到的,同时在问题定位过程中也会花费大量的时间...

  • python中的死锁

    死锁概念 在多道程序系统中,由于多个进程的并发执行,改善了系统资源的利用率并提高了系统的处理能力。然而,多个进程的...

  • 01-iOS多线程 ——图解死锁

    死锁 - 死锁问题,是iOS开发中必须要理解的问题,可能光看一些讲解死锁的代码并不是很容易理解。我制作了下面这幅图...

  • 分布式数据库系列-死锁处理

    死锁检测 假如我们允许发生死锁并且依赖于死锁检测,那么分布式系统中的主要问题就是如何维护等待图,。处理这个问题的常...

  • 死锁排查

    java 自带了工具 bin目录下 1、使用jps定位进程号 命令 jps -l 2、使用jstack查看死锁问题

  • Python中的各种锁

    Python之死锁 死锁分为两种情况,多进程/线程的死锁.或者是单线程的死锁. 1.首先看一下单线程的死锁,单线程...

网友评论

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

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