作爲一名本地Java開發人員,我想我已經達到了我習慣的情況。避免Python中的線程堆棧溢出錯誤的方法
我正在開發一個多線程的Python 2.7應用程序,它使用PyDev並在Windows 7 64位上從Eclipse上運行。它是多線程的,因爲它使用wxPython,因此它使用GUI主線程和繁重的線程(並且我的或者我有一些繁重的工作),每個回調使用一個線程。
我已經達到了一個點,在彈出的0xc00000fd
錯誤python27.dll
與一個appcrash消息。這發生在一個線程中的函數返回一個值。如果我減少了回調所使用的數據量,那麼這段代碼工作正常,所以我非常確定堆棧中的東西太多了,並且沒有任何遞歸變壞。
我可以在創建之前在線程上調用stack_size
以增加可用空間,也許這可能會工作一段時間,如果我要弄清楚有多少空間可以滿足它。線程將不得不進行更多的工作,所以這看起來像是一種創可貼的情況。
我以爲Python使用堆內存創建堆棧,所以這不應該成爲Python中的問題?這是我的許多第三方apis之一,這是真正的罪犯嗎?那麼,如果沒有C語言中低級別的內存創建決策能力,我如何從堆棧和堆內存中獲得一些這樣的內容?
解釋器崩潰顯然相當不正常。有什麼辦法可以生成一個低級崩潰報告,堆棧跟蹤(我的意思是CPU堆棧,而不是Python堆棧),寄存器值,線程等? – NPE
作爲一個初步的,進入visual studio 2010.我一次又一次地看到multiarray.pyd!00000000052e13b3()這一行。也許Numpy或Numpy/Scipy的互動?最後一行是python27.dll!000000001e0a0a36。我將嘗試深入探究python和登錄等。 – demongolem
查看模塊列表,有3個外部:scipy,sklearn和wx-2-8-msw-unicode(即wxPython)。線程列表有7個線程列出。線程ID 6284與列出的位置1e0a0077是崩潰的地方。我真的在想,Scipy(0.11.0),Numpy(1.6.2 MLK)和64位Windows的組合是我在做什麼的。 – demongolem