Add python-eventlet package to MOS 8.0 repository
[packages/trusty/python-eventlet.git] / python-eventlet / benchmarks / context.py
diff --git a/python-eventlet/benchmarks/context.py b/python-eventlet/benchmarks/context.py
new file mode 100644 (file)
index 0000000..d9b564d
--- /dev/null
@@ -0,0 +1,97 @@
+"""Test context switching performance of threading and eventlet"""
+from __future__ import print_function
+
+import threading
+import time
+
+import eventlet
+from eventlet import hubs
+from eventlet.hubs import pyevent, epolls, poll, selects
+
+
+CONTEXT_SWITCHES = 100000
+
+
+def run(event, wait_event):
+    counter = 0
+    while counter <= CONTEXT_SWITCHES:
+        wait_event.wait()
+        wait_event.reset()
+        counter += 1
+        event.send()
+
+
+def test_eventlet():
+    event1 = eventlet.event.Event()
+    event2 = eventlet.event.Event()
+    event1.send()
+    thread1 = eventlet.spawn(run, event1, event2)
+    thread2 = eventlet.spawn(run, event2, event1)
+
+    thread1.wait()
+    thread2.wait()
+
+
+class BenchThread(threading.Thread):
+    def __init__(self, event, wait_event):
+        threading.Thread.__init__(self)
+        self.counter = 0
+        self.event = event
+        self.wait_event = wait_event
+
+    def run(self):
+        while self.counter <= CONTEXT_SWITCHES:
+            self.wait_event.wait()
+            self.wait_event.clear()
+            self.counter += 1
+            self.event.set()
+
+
+def test_thread():
+    event1 = threading.Event()
+    event2 = threading.Event()
+    event1.set()
+    thread1 = BenchThread(event1, event2)
+    thread2 = BenchThread(event2, event1)
+    thread1.start()
+    thread2.start()
+    thread1.join()
+    thread2.join()
+
+
+print("Testing with %d context switches" % CONTEXT_SWITCHES)
+start = time.time()
+test_thread()
+print("threading: %.02f seconds" % (time.time() - start))
+
+try:
+    hubs.use_hub(pyevent)
+    start = time.time()
+    test_eventlet()
+    print("pyevent:   %.02f seconds" % (time.time() - start))
+except:
+    print("pyevent hub unavailable")
+
+try:
+    hubs.use_hub(epolls)
+    start = time.time()
+    test_eventlet()
+    print("epoll:     %.02f seconds" % (time.time() - start))
+except:
+    print("epoll hub unavailable")
+
+try:
+    hubs.use_hub(poll)
+    start = time.time()
+    test_eventlet()
+    print("poll:      %.02f seconds" % (time.time() - start))
+except:
+    print("poll hub unavailable")
+
+try:
+    hubs.use_hub(selects)
+    start = time.time()
+    test_eventlet()
+    print("select:    %.02f seconds" % (time.time() - start))
+except:
+    print("select hub unavailable")