d9b564da7d2ddc42447aa23502a532e5c963fb9a
[packages/trusty/python-eventlet.git] / python-eventlet / benchmarks / context.py
1 """Test context switching performance of threading and eventlet"""
2 from __future__ import print_function
3
4 import threading
5 import time
6
7 import eventlet
8 from eventlet import hubs
9 from eventlet.hubs import pyevent, epolls, poll, selects
10
11
12 CONTEXT_SWITCHES = 100000
13
14
15 def run(event, wait_event):
16     counter = 0
17     while counter <= CONTEXT_SWITCHES:
18         wait_event.wait()
19         wait_event.reset()
20         counter += 1
21         event.send()
22
23
24 def test_eventlet():
25     event1 = eventlet.event.Event()
26     event2 = eventlet.event.Event()
27     event1.send()
28     thread1 = eventlet.spawn(run, event1, event2)
29     thread2 = eventlet.spawn(run, event2, event1)
30
31     thread1.wait()
32     thread2.wait()
33
34
35 class BenchThread(threading.Thread):
36     def __init__(self, event, wait_event):
37         threading.Thread.__init__(self)
38         self.counter = 0
39         self.event = event
40         self.wait_event = wait_event
41
42     def run(self):
43         while self.counter <= CONTEXT_SWITCHES:
44             self.wait_event.wait()
45             self.wait_event.clear()
46             self.counter += 1
47             self.event.set()
48
49
50 def test_thread():
51     event1 = threading.Event()
52     event2 = threading.Event()
53     event1.set()
54     thread1 = BenchThread(event1, event2)
55     thread2 = BenchThread(event2, event1)
56     thread1.start()
57     thread2.start()
58     thread1.join()
59     thread2.join()
60
61
62 print("Testing with %d context switches" % CONTEXT_SWITCHES)
63 start = time.time()
64 test_thread()
65 print("threading: %.02f seconds" % (time.time() - start))
66
67 try:
68     hubs.use_hub(pyevent)
69     start = time.time()
70     test_eventlet()
71     print("pyevent:   %.02f seconds" % (time.time() - start))
72 except:
73     print("pyevent hub unavailable")
74
75 try:
76     hubs.use_hub(epolls)
77     start = time.time()
78     test_eventlet()
79     print("epoll:     %.02f seconds" % (time.time() - start))
80 except:
81     print("epoll hub unavailable")
82
83 try:
84     hubs.use_hub(poll)
85     start = time.time()
86     test_eventlet()
87     print("poll:      %.02f seconds" % (time.time() - start))
88 except:
89     print("poll hub unavailable")
90
91 try:
92     hubs.use_hub(selects)
93     start = time.time()
94     test_eventlet()
95     print("select:    %.02f seconds" % (time.time() - start))
96 except:
97     print("select hub unavailable")