PageRenderTime 40ms CodeModel.GetById 18ms app.highlight 18ms RepoModel.GetById 1ms app.codeStats 0ms

/Doc/includes/mp_benchmarks.py

http://unladen-swallow.googlecode.com/
Python | 238 lines | 156 code | 70 blank | 12 comment | 21 complexity | 35219bfbf3399586a18bf9eb59b03f8b MD5 | raw file
  1#
  2# Simple benchmarks for the multiprocessing package
  3#
  4# Copyright (c) 2006-2008, R Oudkerk
  5# All rights reserved.
  6#
  7
  8import time, sys, multiprocessing, threading, Queue, gc
  9
 10if sys.platform == 'win32':
 11    _timer = time.clock
 12else:
 13    _timer = time.time
 14
 15delta = 1
 16
 17
 18#### TEST_QUEUESPEED
 19
 20def queuespeed_func(q, c, iterations):
 21    a = '0' * 256
 22    c.acquire()
 23    c.notify()
 24    c.release()
 25
 26    for i in xrange(iterations):
 27        q.put(a)
 28
 29    q.put('STOP')
 30
 31def test_queuespeed(Process, q, c):
 32    elapsed = 0
 33    iterations = 1
 34
 35    while elapsed < delta:
 36        iterations *= 2
 37
 38        p = Process(target=queuespeed_func, args=(q, c, iterations))
 39        c.acquire()
 40        p.start()
 41        c.wait()
 42        c.release()
 43
 44        result = None
 45        t = _timer()
 46
 47        while result != 'STOP':
 48            result = q.get()
 49
 50        elapsed = _timer() - t
 51
 52        p.join()
 53
 54    print iterations, 'objects passed through the queue in', elapsed, 'seconds'
 55    print 'average number/sec:', iterations/elapsed
 56
 57
 58#### TEST_PIPESPEED
 59
 60def pipe_func(c, cond, iterations):
 61    a = '0' * 256
 62    cond.acquire()
 63    cond.notify()
 64    cond.release()
 65
 66    for i in xrange(iterations):
 67        c.send(a)
 68
 69    c.send('STOP')
 70
 71def test_pipespeed():
 72    c, d = multiprocessing.Pipe()
 73    cond = multiprocessing.Condition()
 74    elapsed = 0
 75    iterations = 1
 76
 77    while elapsed < delta:
 78        iterations *= 2
 79
 80        p = multiprocessing.Process(target=pipe_func,
 81                                    args=(d, cond, iterations))
 82        cond.acquire()
 83        p.start()
 84        cond.wait()
 85        cond.release()
 86
 87        result = None
 88        t = _timer()
 89
 90        while result != 'STOP':
 91            result = c.recv()
 92
 93        elapsed = _timer() - t
 94        p.join()
 95
 96    print iterations, 'objects passed through connection in',elapsed,'seconds'
 97    print 'average number/sec:', iterations/elapsed
 98
 99
100#### TEST_SEQSPEED
101
102def test_seqspeed(seq):
103    elapsed = 0
104    iterations = 1
105
106    while elapsed < delta:
107        iterations *= 2
108
109        t = _timer()
110
111        for i in xrange(iterations):
112            a = seq[5]
113
114        elapsed = _timer()-t
115
116    print iterations, 'iterations in', elapsed, 'seconds'
117    print 'average number/sec:', iterations/elapsed
118
119
120#### TEST_LOCK
121
122def test_lockspeed(l):
123    elapsed = 0
124    iterations = 1
125
126    while elapsed < delta:
127        iterations *= 2
128
129        t = _timer()
130
131        for i in xrange(iterations):
132            l.acquire()
133            l.release()
134
135        elapsed = _timer()-t
136
137    print iterations, 'iterations in', elapsed, 'seconds'
138    print 'average number/sec:', iterations/elapsed
139
140
141#### TEST_CONDITION
142
143def conditionspeed_func(c, N):
144    c.acquire()
145    c.notify()
146
147    for i in xrange(N):
148        c.wait()
149        c.notify()
150
151    c.release()
152
153def test_conditionspeed(Process, c):
154    elapsed = 0
155    iterations = 1
156
157    while elapsed < delta:
158        iterations *= 2
159
160        c.acquire()
161        p = Process(target=conditionspeed_func, args=(c, iterations))
162        p.start()
163
164        c.wait()
165
166        t = _timer()
167
168        for i in xrange(iterations):
169            c.notify()
170            c.wait()
171
172        elapsed = _timer()-t
173
174        c.release()
175        p.join()
176
177    print iterations * 2, 'waits in', elapsed, 'seconds'
178    print 'average number/sec:', iterations * 2 / elapsed
179
180####
181
182def test():
183    manager = multiprocessing.Manager()
184
185    gc.disable()
186
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()
198
199    print
200
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))
209
210    print
211
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())
224
225    print
226
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())
233
234    gc.enable()
235
236if __name__ == '__main__':
237    multiprocessing.freeze_support()
238    test()