Issue #6644: Fix compile error on AIX.
[python.git] / Doc / includes / mp_benchmarks.py
blob16be77edcef42d23aa7c0be62dbdf37071a0262c
2 # Simple benchmarks for the multiprocessing package
4 # Copyright (c) 2006-2008, R Oudkerk
5 # All rights reserved.
8 import time, sys, multiprocessing, threading, Queue, gc
10 if sys.platform == 'win32':
11 _timer = time.clock
12 else:
13 _timer = time.time
15 delta = 1
18 #### TEST_QUEUESPEED
20 def queuespeed_func(q, c, iterations):
21 a = '0' * 256
22 c.acquire()
23 c.notify()
24 c.release()
26 for i in xrange(iterations):
27 q.put(a)
29 q.put('STOP')
31 def test_queuespeed(Process, q, c):
32 elapsed = 0
33 iterations = 1
35 while elapsed < delta:
36 iterations *= 2
38 p = Process(target=queuespeed_func, args=(q, c, iterations))
39 c.acquire()
40 p.start()
41 c.wait()
42 c.release()
44 result = None
45 t = _timer()
47 while result != 'STOP':
48 result = q.get()
50 elapsed = _timer() - t
52 p.join()
54 print iterations, 'objects passed through the queue in', elapsed, 'seconds'
55 print 'average number/sec:', iterations/elapsed
58 #### TEST_PIPESPEED
60 def pipe_func(c, cond, iterations):
61 a = '0' * 256
62 cond.acquire()
63 cond.notify()
64 cond.release()
66 for i in xrange(iterations):
67 c.send(a)
69 c.send('STOP')
71 def test_pipespeed():
72 c, d = multiprocessing.Pipe()
73 cond = multiprocessing.Condition()
74 elapsed = 0
75 iterations = 1
77 while elapsed < delta:
78 iterations *= 2
80 p = multiprocessing.Process(target=pipe_func,
81 args=(d, cond, iterations))
82 cond.acquire()
83 p.start()
84 cond.wait()
85 cond.release()
87 result = None
88 t = _timer()
90 while result != 'STOP':
91 result = c.recv()
93 elapsed = _timer() - t
94 p.join()
96 print iterations, 'objects passed through connection in',elapsed,'seconds'
97 print 'average number/sec:', iterations/elapsed
100 #### TEST_SEQSPEED
102 def test_seqspeed(seq):
103 elapsed = 0
104 iterations = 1
106 while elapsed < delta:
107 iterations *= 2
109 t = _timer()
111 for i in xrange(iterations):
112 a = seq[5]
114 elapsed = _timer()-t
116 print iterations, 'iterations in', elapsed, 'seconds'
117 print 'average number/sec:', iterations/elapsed
120 #### TEST_LOCK
122 def test_lockspeed(l):
123 elapsed = 0
124 iterations = 1
126 while elapsed < delta:
127 iterations *= 2
129 t = _timer()
131 for i in xrange(iterations):
132 l.acquire()
133 l.release()
135 elapsed = _timer()-t
137 print iterations, 'iterations in', elapsed, 'seconds'
138 print 'average number/sec:', iterations/elapsed
141 #### TEST_CONDITION
143 def conditionspeed_func(c, N):
144 c.acquire()
145 c.notify()
147 for i in xrange(N):
148 c.wait()
149 c.notify()
151 c.release()
153 def test_conditionspeed(Process, c):
154 elapsed = 0
155 iterations = 1
157 while elapsed < delta:
158 iterations *= 2
160 c.acquire()
161 p = Process(target=conditionspeed_func, args=(c, iterations))
162 p.start()
164 c.wait()
166 t = _timer()
168 for i in xrange(iterations):
169 c.notify()
170 c.wait()
172 elapsed = _timer()-t
174 c.release()
175 p.join()
177 print iterations * 2, 'waits in', elapsed, 'seconds'
178 print 'average number/sec:', iterations * 2 / elapsed
180 ####
182 def test():
183 manager = multiprocessing.Manager()
185 gc.disable()
187 print '\n\t######## testing Queue.Queue\n'
188 test_queuespeed(threading.Thread, Queue.Queue(),
189 threading.Condition())
190 print '\n\t######## testing multiprocessing.Queue\n'
191 test_queuespeed(multiprocessing.Process, multiprocessing.Queue(),
192 multiprocessing.Condition())
193 print '\n\t######## testing Queue managed by server process\n'
194 test_queuespeed(multiprocessing.Process, manager.Queue(),
195 manager.Condition())
196 print '\n\t######## testing multiprocessing.Pipe\n'
197 test_pipespeed()
199 print
201 print '\n\t######## testing list\n'
202 test_seqspeed(range(10))
203 print '\n\t######## testing list managed by server process\n'
204 test_seqspeed(manager.list(range(10)))
205 print '\n\t######## testing Array("i", ..., lock=False)\n'
206 test_seqspeed(multiprocessing.Array('i', range(10), lock=False))
207 print '\n\t######## testing Array("i", ..., lock=True)\n'
208 test_seqspeed(multiprocessing.Array('i', range(10), lock=True))
210 print
212 print '\n\t######## testing threading.Lock\n'
213 test_lockspeed(threading.Lock())
214 print '\n\t######## testing threading.RLock\n'
215 test_lockspeed(threading.RLock())
216 print '\n\t######## testing multiprocessing.Lock\n'
217 test_lockspeed(multiprocessing.Lock())
218 print '\n\t######## testing multiprocessing.RLock\n'
219 test_lockspeed(multiprocessing.RLock())
220 print '\n\t######## testing lock managed by server process\n'
221 test_lockspeed(manager.Lock())
222 print '\n\t######## testing rlock managed by server process\n'
223 test_lockspeed(manager.RLock())
225 print
227 print '\n\t######## testing threading.Condition\n'
228 test_conditionspeed(threading.Thread, threading.Condition())
229 print '\n\t######## testing multiprocessing.Condition\n'
230 test_conditionspeed(multiprocessing.Process, multiprocessing.Condition())
231 print '\n\t######## testing condition managed by a server process\n'
232 test_conditionspeed(multiprocessing.Process, manager.Condition())
234 gc.enable()
236 if __name__ == '__main__':
237 multiprocessing.freeze_support()
238 test()