Revision: 7086
          http://matplotlib.svn.sourceforge.net/matplotlib/?rev=7086&view=rev
Author:   ryanmay
Date:     2009-05-06 18:13:41 +0000 (Wed, 06 May 2009)

Log Message:
-----------
Add an example of an updating plot using (multi)processing.  Credit goes to 
Robert Cimrman.

Modified Paths:
--------------
    trunk/matplotlib/CHANGELOG

Added Paths:
-----------
    trunk/matplotlib/examples/misc/log.py

Modified: trunk/matplotlib/CHANGELOG
===================================================================
--- trunk/matplotlib/CHANGELOG  2009-05-05 17:27:23 UTC (rev 7085)
+++ trunk/matplotlib/CHANGELOG  2009-05-06 18:13:41 UTC (rev 7086)
@@ -1,9 +1,13 @@
 ======================================================================
-2009-05-05 Add Axes.get_legend_handles_labels method -JJL
+2009-05-05 Add an example that shows how to make a plot that updates
+           using data from another process.  Thanks to Robert
+           Cimrman - RMM
 
-2009-05-04 Fix bug that Text.Annotation is still drawn while set to 
-           not visible.-JJL
+2009-05-05 Add Axes.get_legend_handles_labels method. - JJL
 
+2009-05-04 Fix bug that Text.Annotation is still drawn while set to
+           not visible. - JJL
+
 2009-05-04 Added TJ's fill_betweenx patch - JDH
 
 2009-05-02 Added options to plotfile based on question from

Added: trunk/matplotlib/examples/misc/log.py
===================================================================
--- trunk/matplotlib/examples/misc/log.py                               (rev 0)
+++ trunk/matplotlib/examples/misc/log.py       2009-05-06 18:13:41 UTC (rev 
7086)
@@ -0,0 +1,87 @@
+#Demo of using multiprocessing for generating data in one process and plotting
+#in another.
+#Written by Robert Cimrman
+#Requires >= Python 2.6 for the multiprocessing module or having the
+#standalone processing module installed
+import time
+try:
+    from multiprocessing import Process, Pipe
+except ImportError:
+    from processing import Process, Pipe
+from Queue import Empty
+import numpy as np
+import pylab
+import gobject
+
+class ProcessPlotter(object):
+
+    def __init__(self):
+        self.x = []
+        self.y = []
+
+    def terminate(self):
+        pylab.close('all')
+
+    def poll_draw(self):
+
+        def call_back():
+            while 1:
+                if not self.pipe.poll():
+                    break
+
+                command = self.pipe.recv()
+
+                if command is None:
+                    self.terminate()
+                    return False
+
+                else:
+                    self.x.append(command[0])
+                    self.y.append(command[1])
+                    self.ax.plot(self.x, self.y, 'ro')
+
+            self.fig.canvas.draw()
+            return True
+
+        return call_back
+
+    def __call__(self, pipe):
+        print 'starting plotter...'
+
+        self.pipe = pipe
+        self.fig = pylab.figure()
+
+        self.ax = self.fig.add_subplot(111)
+        self.gid = gobject.timeout_add(1000, self.poll_draw())
+
+        print '...done'
+        pylab.show()
+
+
+class NBPlot(object):
+    def __init__(self):
+        self.plot_pipe, plotter_pipe = Pipe()
+        self.plotter = ProcessPlotter()
+        self.plot_process = Process(target = self.plotter,
+                                    args = (plotter_pipe,))
+        self.plot_process.daemon = True
+        self.plot_process.start()
+
+    def plot(self, finished=False):
+        send = self.plot_pipe.send
+        if finished:
+            send(None)
+        else:
+            data = np.random.random(2)
+            send(data)
+
+def main():
+    pl = NBPlot()
+    for ii in xrange(10):
+        pl.plot()
+        time.sleep(0.5)
+    raw_input('press Enter...')
+    pl.plot(finished=True)
+
+if __name__ == '__main__':
+    main()


This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.

------------------------------------------------------------------------------
The NEW KODAK i700 Series Scanners deliver under ANY circumstances! Your
production scanning environment may not be a perfect world - but thanks to
Kodak, there's a perfect scanner to get the job done! With the NEW KODAK i700
Series Scanner you'll get full speed at 300 dpi even with all image 
processing features enabled. http://p.sf.net/sfu/kodak-com
_______________________________________________
Matplotlib-checkins mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/matplotlib-checkins

Reply via email to