I removed all calls to threads and swapped Gdk.threads_add_timeout to 
Glib.timeout_add (See attached. However if I comment the call to 
self.canvas.draw(), the python memory utilisation sits at 30.8Mb.


from gi.repository import Gtk, Gdk, GLib


from matplotlib.figure import Figure
# Tell matplotlib to use a GTK canvas for drawing
#from matplotlib.backends.backend_gtk3agg import FigureCanvasGTK3Agg as 
FigureCanvas
from matplotlib.backends.backend_gtk3cairo import FigureCanvasGTK3Cairo as 
FigureCanvas


# Application Class
class pyMatPlotLibTest(object):

    def update_gui(self):
        y = [self.index] * 1024

        self.index += 1
        if self.index > 1024: self.index = 0

        #Gdk.threads_enter()
        self.line.set_ydata(y)
        self.axes.set_title("%d" % self.index)
        self.canvas.draw()
        #Gdk.threads_leave()

        return True

    def __init__(self):
        self.index = 0
        self.x     = range(1024)

        # Initialise the threads system and allow threads to work with GTK
        #GLib.threads_init()

        # Draw scope
        self.figure = Figure(dpi=100)
        self.canvas = FigureCanvas(self.figure)  # a Gtk.DrawingArea
        #self.widget.alignment_ScopeDisplay.add(self.canvas)

        # Draw initial scope
        self.axes = self.figure.add_subplot(111)
        self.line, = self.axes.plot(self.x, [0]* 1024)
        self.axes.set_title("None")
        self.axes.set_xbound(0.0, 1024)
        self.axes.set_ybound(-16, 1040)

        self.window_main = Gtk.Window(title="pyMatPlotLibTest")
        self.window_main.connect("destroy", lambda x: Gtk.main_quit())
        self.window_main.add(self.canvas)
        self.window_main.show_all()

        # Ticker for the update of the input state monitoring
        GLib.timeout_add(10, self.update_gui)
        #Gdk.threads_add_timeout(priority = GLib.PRIORITY_DEFAULT_IDLE,
        #                        interval = 10, # msec
        #                        function = self.update_gui)
        Gtk.main()


if __name__ == "__main__":
    gui = pyMatPlotLibTest()

From: ben.v.r...@gmail.com [mailto:ben.v.r...@gmail.com] On Behalf Of Benjamin 
Root
Sent: 26 May 2015 14:53
To: David Hughes
Cc: Matplotlib Users
Subject: Re: [Matplotlib-users] matplotlib.backends.backend_gtk3cairo memory 
leak

I take it that it doesn't happen using the GTK3Agg backend? What about the 
threading portion? Does it happen if you take the threading out?
Ben Root

On Tue, May 26, 2015 at 8:23 AM, David 
<dhug...@rapiscansystems.com<mailto:dhug...@rapiscansystems.com>> wrote:
Hi, I seem to have a memory leak while generating a 'live' plot display. This 
wasn't the case for GTK2, but the example below is consuming ~800k/second 
(Matplotlib 1.4.3, PyGI aio-3.14.0_rev18, Windows 7 x64, python 3.4.3). I have 
checked the garbage collector but it doesn't show anything interesting (no 
massive incrementing count of uncollected items). Anyway, I would be very 
grateful if somebody could confirm and/or fix this (or tell me what I'm doing 
wrong). Many thanks David Code below:

from gi.repository import Gtk, Gdk, GLib





from matplotlib.figure import Figure

# Tell matplotlib to use a GTK canvas for drawing

#from matplotlib.backends.backend_gtk3agg import FigureCanvasGTK3Agg as 
FigureCanvas

from matplotlib.backends.backend_gtk3cairo import FigureCanvasGTK3Cairo as 
FigureCanvas





# Application Class

class pyMatPlotLibTest(object):



    def update_gui(self):

        y = [self.index] * 1024



        self.index += 1

        if self.index > 1024: self.index = 0



        Gdk.threads_enter()

        self.line.set_ydata(y)

        self.axes.set_title("%d" % self.index)

        self.canvas.draw()

        Gdk.threads_leave()



        return True



    def __init__(self):

        self.index = 0

        self.x     = range(1024)



        # Initialise the threads system and allow threads to work with GTK

        GLib.threads_init()



        # Draw scope

        self.figure = Figure(dpi=100)

        self.canvas = FigureCanvas(self.figure)  # a Gtk.DrawingArea

        #self.widget.alignment_ScopeDisplay.add(self.canvas)



        # Draw initial scope

        self.axes = self.figure.add_subplot(111)

        self.line, = self.axes.plot(self.x, [0]* 1024)

        self.axes.set_title("None")

        self.axes.set_xbound(0.0, 1024)

        self.axes.set_ybound(-16, 1040)



        self.window_main = Gtk.Window(title="pyMatPlotLibTest")

        self.window_main.connect("destroy", lambda x: Gtk.main_quit())

        self.window_main.add(self.canvas)

        self.window_main.show_all()



        # Ticker for the update of the input state monitoring

        Gdk.threads_add_timeout(priority = GLib.PRIORITY_DEFAULT_IDLE,

                                interval = 10, # msec

                                function = self.update_gui)

        Gtk.main()





if __name__ == "__main__":

    gui = pyMatPlotLibTest()

________________________________
View this message in context: matplotlib.backends.backend_gtk3cairo memory 
leak<http://matplotlib.1069221.n5.nabble.com/matplotlib-backends-backend-gtk3cairo-memory-leak-tp45614.html>
Sent from the matplotlib - users mailing list 
archive<http://matplotlib.1069221.n5.nabble.com/matplotlib-users-f3.html> at 
Nabble.com.

------------------------------------------------------------------------------
One dashboard for servers and applications across Physical-Virtual-Cloud
Widest out-of-the-box monitoring support with 50+ applications
Performance metrics, stats and reports that give you Actionable Insights
Deep dive visibility with transaction tracing using APM Insight.
http://ad.doubleclick.net/ddm/clk/290420510;117567292;y
_______________________________________________
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net<mailto:Matplotlib-users@lists.sourceforge.net>
https://lists.sourceforge.net/lists/listinfo/matplotlib-users

------------------------------------------------------------------------------
One dashboard for servers and applications across Physical-Virtual-Cloud 
Widest out-of-the-box monitoring support with 50+ applications
Performance metrics, stats and reports that give you Actionable Insights
Deep dive visibility with transaction tracing using APM Insight.
http://ad.doubleclick.net/ddm/clk/290420510;117567292;y
_______________________________________________
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-users

Reply via email to