最近有个应用中用到了多线程执行某个任务,但是程序有时候就不动,排查出原因就是开启的新线程卡在哪里了,但是又不知道原因。在jvm中可以jstack pid
导出当前进程的所有vm线程状态,请问在python在有这个功能吗,谢谢!
thread = Thread(target=util.do_import, args=(keywords, category, businessType, country))
thread.start()
最近有个应用中用到了多线程执行某个任务,但是程序有时候就不动,排查出原因就是开启的新线程卡在哪里了,但是又不知道原因。在jvm中可以jstack pid
导出当前进程的所有vm线程状态,请问在python在有这个功能吗,谢谢!
thread = Thread(target=util.do_import, args=(keywords, category, businessType, country))
thread.start()
我不懂 Java,所以不清楚你想要的是什么。你是想打印出所有线程的调用栈吗?好像不容易的样子。
我一般是:
3 回答3.2k 阅读✓ 已解决
2 回答2k 阅读✓ 已解决
2 回答1.4k 阅读✓ 已解决
2 回答1.8k 阅读✓ 已解决
3 回答1.8k 阅读
1 回答1.5k 阅读✓ 已解决
1 回答1.4k 阅读✓ 已解决
没有像jstack那么方便直接用的东西,一般来说有几个方案:
import pudb; pudb.set_interrupt_handler()
,在运行的时候就可以Ctrl-C进入到交互式调试环境,易用性还好吧。celery
实现的 install_cry_handler,或者看看 signalhandler,这个在 Python 3.3 自带了。NOTE: 所有依赖signal的方案,有个缺点就是,POSIX有很多函数会在这些中断产生时,返回EINTR,直接导致 Python 异常,比如
send
,recv
,read
,write
等等。。。