python中有没有像java中的jstack命令
天蓬老师
天蓬老师 2017-04-17 13:04:00
0
3
1045
天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

全部回覆(3)
PHPzhong

沒有像jstack那麼方便直接用的東西,一般來說有幾個方案:

  • IDE: 用諸如 PyCharm, Eclpise with Pydev 的工具調試,覺得掛起的時候暫停並檢查各個調用棧。
  • GDB: 優點是可以調試到native extension,缺點也很明顯,需要在編譯Python的時候加上Debug Symbols,預設這個是沒有的。簡單的說就是功能強大但是配得麻煩。
  • pdb:適合下斷點...
  • pudb: 改下程式碼,在程式入口import pudb; pudb.set_interrupt_handler(),在運作的時候就可以Ctrl-C進入到互動式偵錯環境,易用性還好吧。
  • 擼一個singal handler用來列印所有堆疊信息,參考 celery 實作的 install_cry_handler,或是看看 signalhandler,這個在 Python 3.3 自帶了。

NOTE: 所有依賴signal的方案,有個缺點就是,POSIX有很多函數會在這些中斷產生時,回傳EINTR,直接導致Python 異常,例如send, recv, read, write 等等。 。 。

巴扎黑

我不懂 Java,所以不清楚你想要的是什麼。你是想列印出所有執行緒的呼叫棧嗎?好像不容易的樣子。

我通常是:

  1. 盡量避免使用執行緒
  2. 列印日誌。這樣可以大致推斷出線程在哪裡卡住了
  3. strace 到各個執行緒上檢查,看看它們卡在什麼系統呼叫上了
PHPzhong

python直接用多線程貌似是不行的 因為有個叫GIL的東西 至於你想看線程情況 可以用pdb調試 試試

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板