Menu

[r8847]: / trunk / matplotlib / examples / misc / multiprocess.py  Maximize  Restore  History

Download this file

90 lines (69 with data), 2.1 kB

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
#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
import numpy as np
import matplotlib
matplotlib.use('GtkAgg')
import matplotlib.pyplot as plt
import gobject
class ProcessPlotter(object):
def __init__(self):
self.x = []
self.y = []
def terminate(self):
plt.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 = plt.figure()
self.ax = self.fig.add_subplot(111)
self.gid = gobject.timeout_add(1000, self.poll_draw())
print '...done'
plt.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()
Want the latest updates on software, tech news, and AI?
Get latest updates about software, tech news, and AI from SourceForge directly in your inbox once a month.