python thread dump

一直希望python也有类似java dump的功能,上网找了一段代码可以实现类似效果:


def stacktraces():
    code = []
    import sys
    import traceback

    for threadId, stack in sys._current_frames().items():
        code.append("# 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()))

    return "<br>".join(code)


<div class="highlight" style="background: #f8f8f8"><pre style="line-height: 125%"><span style="color: #408080; font-style: italic">

# ThreadID: 47988642959488<br>File: "build/bdist.linux-x86_64/egg/gevent/greenlet.py", line 390, in run<br> result = self._run(*self.args, **self.kwargs)<br>File: "/duitang/dist/sys/python/lib/python2.7/site-packages/gunicorn-0.14.6-py2.7.egg/gunicorn/workers/async.py", line 44, in handle<br> self.handle_request(req, client, addr)<br>File: "/duitang/dist/sys/python/lib/python2.7/site-packages/gunicorn-0.14.6-py2.7.egg/gunicorn/workers/ggevent.py", line 88, in handle_request<br> super(GeventWorker, self).handle_request(*args)<br>File: "/duitang/dist/sys/python/lib/python2.7/site-packages/gunicorn-0.14.6-py2.7.egg/gunicorn/workers/async.py", line 78, in handle_request<br> respiter = self.wsgi(environ, resp.start_response)<br>File: "/duitang/dist/sys/python/lib/python2.7/site-packages/django/core/handlers/wsgi.py", line 273, in __call__<br> response = self.get_response(request)<br>File: "/duitang/dist/sys/python/lib/python2.7/site-packages/django/core/handlers/base.py", line 111, in get_response<br> response = callback(request, *callback_args, **callback_kwargs)<br>File: "/duitang/dist/sys/python/lib/python2.7/site-packages/django/contrib/auth/decorators.py", line 23, in _wrapped_view<br> return view_func(request, *args, **kwargs)<br>File: "/duitang/dist/sys/python/lib/python2.7/site-packages/django/contrib/admin/views/decorators.py", line 19, in _checklogin<br> return view_func(request, *args, **kwargs)<br>File: "/data1/duitang/dist/app/test/7199/duitang/analytic/views.py", line 878, in dump<br> stack = cf.stacktraces()<br>File: "/data1/duitang/dist/app/test/7199/duitang/cf.py", line 835, in stacktraces<br> for filename, lineno, name, line in traceback.extract_stack(stack):

</span> </pre></div> 





猜你喜欢

转载自san-yun.iteye.com/blog/1639763