ยปCore Development>Code coverage>Doc/includes/mp_benchmarks.py

Python code coverage for Doc/includes/mp_benchmarks.py

#countcontent
1n/a#
2n/a# Simple benchmarks for the multiprocessing package
3n/a#
4n/a# Copyright (c) 2006-2008, R Oudkerk
5n/a# All rights reserved.
6n/a#
7n/a
8n/aimport time
9n/aimport multiprocessing
10n/aimport threading
11n/aimport queue
12n/aimport gc
13n/a
14n/a_timer = time.perf_counter
15n/a
16n/adelta = 1
17n/a
18n/a
19n/a#### TEST_QUEUESPEED
20n/a
21n/adef queuespeed_func(q, c, iterations):
22n/a a = '0' * 256
23n/a c.acquire()
24n/a c.notify()
25n/a c.release()
26n/a
27n/a for i in range(iterations):
28n/a q.put(a)
29n/a
30n/a q.put('STOP')
31n/a
32n/adef test_queuespeed(Process, q, c):
33n/a elapsed = 0
34n/a iterations = 1
35n/a
36n/a while elapsed < delta:
37n/a iterations *= 2
38n/a
39n/a p = Process(target=queuespeed_func, args=(q, c, iterations))
40n/a c.acquire()
41n/a p.start()
42n/a c.wait()
43n/a c.release()
44n/a
45n/a result = None
46n/a t = _timer()
47n/a
48n/a while result != 'STOP':
49n/a result = q.get()
50n/a
51n/a elapsed = _timer() - t
52n/a
53n/a p.join()
54n/a
55n/a print(iterations, 'objects passed through the queue in', elapsed, 'seconds')
56n/a print('average number/sec:', iterations/elapsed)
57n/a
58n/a
59n/a#### TEST_PIPESPEED
60n/a
61n/adef pipe_func(c, cond, iterations):
62n/a a = '0' * 256
63n/a cond.acquire()
64n/a cond.notify()
65n/a cond.release()
66n/a
67n/a for i in range(iterations):
68n/a c.send(a)
69n/a
70n/a c.send('STOP')
71n/a
72n/adef test_pipespeed():
73n/a c, d = multiprocessing.Pipe()
74n/a cond = multiprocessing.Condition()
75n/a elapsed = 0
76n/a iterations = 1
77n/a
78n/a while elapsed < delta:
79n/a iterations *= 2
80n/a
81n/a p = multiprocessing.Process(target=pipe_func,
82n/a args=(d, cond, iterations))
83n/a cond.acquire()
84n/a p.start()
85n/a cond.wait()
86n/a cond.release()
87n/a
88n/a result = None
89n/a t = _timer()
90n/a
91n/a while result != 'STOP':
92n/a result = c.recv()
93n/a
94n/a elapsed = _timer() - t
95n/a p.join()
96n/a
97n/a print(iterations, 'objects passed through connection in',elapsed,'seconds')
98n/a print('average number/sec:', iterations/elapsed)
99n/a
100n/a
101n/a#### TEST_SEQSPEED
102n/a
103n/adef test_seqspeed(seq):
104n/a elapsed = 0
105n/a iterations = 1
106n/a
107n/a while elapsed < delta:
108n/a iterations *= 2
109n/a
110n/a t = _timer()
111n/a
112n/a for i in range(iterations):
113n/a a = seq[5]
114n/a
115n/a elapsed = _timer() - t
116n/a
117n/a print(iterations, 'iterations in', elapsed, 'seconds')
118n/a print('average number/sec:', iterations/elapsed)
119n/a
120n/a
121n/a#### TEST_LOCK
122n/a
123n/adef test_lockspeed(l):
124n/a elapsed = 0
125n/a iterations = 1
126n/a
127n/a while elapsed < delta:
128n/a iterations *= 2
129n/a
130n/a t = _timer()
131n/a
132n/a for i in range(iterations):
133n/a l.acquire()
134n/a l.release()
135n/a
136n/a elapsed = _timer() - t
137n/a
138n/a print(iterations, 'iterations in', elapsed, 'seconds')
139n/a print('average number/sec:', iterations/elapsed)
140n/a
141n/a
142n/a#### TEST_CONDITION
143n/a
144n/adef conditionspeed_func(c, N):
145n/a c.acquire()
146n/a c.notify()
147n/a
148n/a for i in range(N):
149n/a c.wait()
150n/a c.notify()
151n/a
152n/a c.release()
153n/a
154n/adef test_conditionspeed(Process, c):
155n/a elapsed = 0
156n/a iterations = 1
157n/a
158n/a while elapsed < delta:
159n/a iterations *= 2
160n/a
161n/a c.acquire()
162n/a p = Process(target=conditionspeed_func, args=(c, iterations))
163n/a p.start()
164n/a
165n/a c.wait()
166n/a
167n/a t = _timer()
168n/a
169n/a for i in range(iterations):
170n/a c.notify()
171n/a c.wait()
172n/a
173n/a elapsed = _timer() - t
174n/a
175n/a c.release()
176n/a p.join()
177n/a
178n/a print(iterations * 2, 'waits in', elapsed, 'seconds')
179n/a print('average number/sec:', iterations * 2 / elapsed)
180n/a
181n/a####
182n/a
183n/adef test():
184n/a manager = multiprocessing.Manager()
185n/a
186n/a gc.disable()
187n/a
188n/a print('\n\t######## testing Queue.Queue\n')
189n/a test_queuespeed(threading.Thread, queue.Queue(),
190n/a threading.Condition())
191n/a print('\n\t######## testing multiprocessing.Queue\n')
192n/a test_queuespeed(multiprocessing.Process, multiprocessing.Queue(),
193n/a multiprocessing.Condition())
194n/a print('\n\t######## testing Queue managed by server process\n')
195n/a test_queuespeed(multiprocessing.Process, manager.Queue(),
196n/a manager.Condition())
197n/a print('\n\t######## testing multiprocessing.Pipe\n')
198n/a test_pipespeed()
199n/a
200n/a print()
201n/a
202n/a print('\n\t######## testing list\n')
203n/a test_seqspeed(list(range(10)))
204n/a print('\n\t######## testing list managed by server process\n')
205n/a test_seqspeed(manager.list(list(range(10))))
206n/a print('\n\t######## testing Array("i", ..., lock=False)\n')
207n/a test_seqspeed(multiprocessing.Array('i', list(range(10)), lock=False))
208n/a print('\n\t######## testing Array("i", ..., lock=True)\n')
209n/a test_seqspeed(multiprocessing.Array('i', list(range(10)), lock=True))
210n/a
211n/a print()
212n/a
213n/a print('\n\t######## testing threading.Lock\n')
214n/a test_lockspeed(threading.Lock())
215n/a print('\n\t######## testing threading.RLock\n')
216n/a test_lockspeed(threading.RLock())
217n/a print('\n\t######## testing multiprocessing.Lock\n')
218n/a test_lockspeed(multiprocessing.Lock())
219n/a print('\n\t######## testing multiprocessing.RLock\n')
220n/a test_lockspeed(multiprocessing.RLock())
221n/a print('\n\t######## testing lock managed by server process\n')
222n/a test_lockspeed(manager.Lock())
223n/a print('\n\t######## testing rlock managed by server process\n')
224n/a test_lockspeed(manager.RLock())
225n/a
226n/a print()
227n/a
228n/a print('\n\t######## testing threading.Condition\n')
229n/a test_conditionspeed(threading.Thread, threading.Condition())
230n/a print('\n\t######## testing multiprocessing.Condition\n')
231n/a test_conditionspeed(multiprocessing.Process, multiprocessing.Condition())
232n/a print('\n\t######## testing condition managed by a server process\n')
233n/a test_conditionspeed(multiprocessing.Process, manager.Condition())
234n/a
235n/a gc.enable()
236n/a
237n/aif __name__ == '__main__':
238n/a multiprocessing.freeze_support()
239n/a test()