I am writing a GUI application in wxPython and using MPL that plots figures, saves them to image files, and then closes them all from within a thread to keep the GUI responsive. Using the Enthought 2.3 install I would sporatically have crashes that were hard to reproduce, but now that I've upgrade to Enthought 2.5 (Python 2.5 and MPL 0.91.2.0001) it started throwing exceptions when attempting to close a figure that I don't understand. I've created an example script that excites the exception. I'm not sure if the syptoms are a combination of problems caused by my use of threads but this problem does not occur if threading is removed from the script. I've read of others experiencing memory leaks and such when closing figures, but no situations quite like this.
I am working from a desktop in Windows XP and I use the WXAgg backend. Does anyone have any ideas, or any feedback on my use of threads? Thanks, Josh ------------------------------------------------------------------------------------------- #!/usr/bin/python import wx import time from threading import Thread import matplotlib matplotlib.interactive(False) matplotlib.use('WXAgg') import matplotlib.pylab class TestThread(Thread): def __init__(self, notify_window): Thread.__init__(self) def run(self): while True: # Continuous loop that plots and destroys a figure matplotlib.pylab.figure(1) matplotlib.pylab.plot(range(0,5), range(0,5)) matplotlib.pylab.show() time.sleep(1) matplotlib.pylab.close(1) ### ERROR OCCURS HERE class MainPanel(wx.Panel): def __init__(self, *args, **kwargs): wx.Panel.__init__(self, *args, **kwargs) self.test_thread = None # GUI objects and bindings self.run_test_button = wx.Button(self, -1, "Run") self.top_sizer = wx.BoxSizer(wx.VERTICAL) self.top_sizer.Add(self.run_test_button, 0, wx.EXPAND|wx.ALL, border=2) self.SetSizer(self.top_sizer) self.Bind(wx.EVT_BUTTON, self.run_test_button_bind, id = self.run_test_button.GetId()) ### Binding Methods def run_test_button_bind(self, event): self.test_thread = TestThread(self) self.test_thread.start() #self.test_thread.run() class MainFrame(wx.Frame): def __init__(self, *args, **kwargs): mFrame = wx.Frame.__init__(self, *args, **kwargs) self.mPanel = MainPanel(self, -1) class mainApp(wx.App): def OnInit(self): self.frame = MainFrame(None, title="Test", size=wx.Size(100, 100)) self.frame.Show() self.SetTopWindow(self.frame) return True if __name__ == "__main__": app = mainApp() app.MainLoop() -------------------------------------------------------------------------------------------------- Exception in thread Thread-1: Traceback (most recent call last): File "C:\Python25\lib\threading.py", line 486, in __bootstrap_inner self.run() File ".\test.py", line 22, in run matplotlib.pylab.close(1) ### ERROR OCCURS HERE File "C:\python25\lib\site-packages\matplotlib-0.91.2.0001-py2.5-win32.egg\matplotlib\pyplot.py", line 245, in close _pylab_helpers.Gcf.destroy(arg) File "C:\python25\lib\site-packages\matplotlib-0.91.2.0001-py2.5-win32.egg\matplotlib\_pylab_helpers.py", line 28, in destroy figManager.destroy() File "C:\python25\lib\site-packages\matplotlib-0.91.2.0001-py2.5-win32.egg\matplotlib\backends\backend_wx.py", line 1406, in destroy self.frame.Destroy() File "C:\python25\lib\site-packages\matplotlib-0.91.2.0001-py2.5-win32.egg\matplotlib\backends\backend_wx.py", line 1365, in Destroy wxapp.Yield() File "C:\python25\lib\site-packages\wxpython-2.8.4.0.0003_s-py2.5-win32.egg\wx\_core.py", line 7119, in Yield return _core_.PyApp_Yield(*args, **kwargs) PyAssertionError: C++ assertion "wxThread::IsMain()" failed at ..\..\src\msw\evtloop.cpp(244) in wxEventLoop::Dispatch(): only the main thread can process Windows messages -- View this message in context: http://www.nabble.com/Problems-plotting-closing-figures-within-a-thread-tp19789227p19789227.html Sent from the matplotlib - users mailing list archive at Nabble.com. ------------------------------------------------------------------------- This SF.Net email is sponsored by the Moblin Your Move Developer's challenge Build the coolest Linux based applications with Moblin SDK & win great prizes Grand prize is a trip for two to an Open Source event anywhere in the world http://moblin-contest.org/redirect.php?banner_id=100&url=/ _______________________________________________ Matplotlib-users mailing list Matplotlib-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/matplotlib-users