我设计了一个Python软件来从我的微控制器收集数据并制作实时图:
我的GUI中有12个matplotlib动画(GUI使用PyQt设计)。每个matplotlib动画都连接到一个TCP线程,通过该链接接收浮点数。收到浮点数后,matplotlib动画会向图形添加一个新点。和huray,我们得到了现场情节!
我的软件运行平稳几秒钟(有时长达半分钟)。然后是灾难来袭。 Windows提到“Python已停止工作”。我甚至没有在终端窗口中打印出异常报告(因为通常会发生我所有其他错误)。 Windows询问我是否要调试Python应用程序,并建议使用Visual Basic。在Visual Basic中,我收到以下错误报告:
Unhandled exception at 0x00007FFC596CE6FC (ntdll.dll) in
python.exe: 0xC0000374: A heap has been corrupted
(parameters: 0x00007FFC597222B0).
Unhandled exception at 0x00007FFC56071F28 in python.exe:
Microsoft C++ exception: std::bad_alloc at memory
location 0x0000003DBA30E8F0.
Exception thrown at 0x0000000000000000 in python.exe:
0xC0000005: Access violation executing location
0x0000000000000000.
我重新启动所有内容,然后再次尝试。灾难再次发生,我在Visual Basic中收到以下错误报告:
Unhandled exception at 0x00000000660E8D61 (QtGui4.dll) in python.exe:
0xC0000005: Access violation reading location 0x0000000000000020.
再一次,我重新开始进行另一次试验。灾难再次袭击我:
Unhandled exception at 0x00007FFC596CE6FC (ntdll.dll) in python.exe:
0xC0000374: A heap has been corrupted (parameters: 0x00007FFC597222B0).
不幸的是,我不清楚这些错误报告的含义。我用谷歌搜索了QtGui4.dll
和ntdll.dll
。我找到了几个程序来修复我的计算机上的dll,但诺顿防病毒软件告诉我,我不能相信它们。所以我现在没有选择,转而使用StackOverflow作为我的最后手段。
提前感谢您的帮助。
修改
:我已按照您的建议通过matplotlib.use("Qt4Agg")
更改matplotlib后端,但它没有帮助。
答案 0 :(得分:1)
我认为这个问题现在已经解决了。这是问题的根本原因。我以一种不安全的方式从另一个线程访问我的GUI(例如实时图,LED,......)。该应用程序运行良好一段时间(半分钟),但后来不可避免地崩溃。
我通过使用信号/插槽机制修复它。这就是(另一个StackOverflow问题的链接):
Simplest way for PyQT Threading
对于给您带来的不便,我很抱歉。