Skip to content

Instantly share code, notes, and snippets.

@teepark
Created June 11, 2010 18:19
Show Gist options
  • Save teepark/434848 to your computer and use it in GitHub Desktop.
Save teepark/434848 to your computer and use it in GitHub Desktop.
#!/usr/bin/env python
# vim: fileencoding=utf8:et:sta:ai:sw=4:ts=4:sts=4
import time
import greenhouse
import eventlet
import gevent
import gogreen.coro
def gr_simple():
greenhouse.pause()
greenhouse.pause()
def e_simple():
eventlet.sleep()
eventlet.sleep()
def g_simple():
gevent.sleep()
gevent.sleep()
def gr_timed():
greenhouse.pause_for(0)
greenhouse.pause_for(0)
def e_timed():
eventlet.sleep(0)
eventlet.sleep(0)
def g_timed():
gevent.sleep(0)
gevent.sleep(0)
class GoGreenWorker(gogreen.coro.Thread):
def run(self):
pass
def gg_simple():
pass
def main(iterations=100000):
start = time.time()
for i in xrange(iterations):
greenhouse.schedule(gr_simple)
print "greenhouse schedule".ljust(30), (time.time() - start)
start = time.time()
greenhouse.pause()
print "greenhouse simple (first)".ljust(30), (time.time() - start)
start = time.time()
greenhouse.pause()
print "greenhouse simple (second)".ljust(30), (time.time() - start)
greenhouse.pause()
greenhouse.pause()
greenhouse.pause()
for i in xrange(iterations):
greenhouse.schedule(gr_timed)
start = time.time()
greenhouse.pause()
print "greenhouse timed (first)".ljust(30), (time.time() - start)
start = time.time()
greenhouse.pause()
print "greenhouse timed (second)".ljust(30), (time.time() - start)
greenhouse.pause()
greenhouse.pause()
greenhouse.pause()
print
start = time.time()
for i in xrange(iterations):
eventlet.spawn(e_simple)
print "eventlet spawn".ljust(30), (time.time() - start)
start = time.time()
eventlet.sleep()
print "eventlet simple (first)".ljust(30), (time.time() - start)
start = time.time()
eventlet.sleep()
print "eventlet simple (second)".ljust(30), (time.time() - start)
eventlet.sleep()
eventlet.sleep()
eventlet.sleep()
for i in xrange(iterations):
eventlet.spawn(e_timed)
start = time.time()
eventlet.sleep()
print "eventlet timed (first)".ljust(30), (time.time() - start)
start = time.time()
eventlet.sleep()
print "eventlet timed (second)".ljust(30), (time.time() - start)
eventlet.sleep()
eventlet.sleep()
eventlet.sleep()
print
start = time.time()
for i in xrange(iterations):
eventlet.spawn_n(e_simple)
print "eventlet spawn_n".ljust(30), (time.time() - start)
start = time.time()
eventlet.sleep()
print "eventlet _n simple (first)".ljust(30), (time.time() - start)
start = time.time()
eventlet.sleep()
print "eventlet _n simple (second)".ljust(30), (time.time() - start)
eventlet.sleep()
eventlet.sleep()
eventlet.sleep()
for i in xrange(iterations):
eventlet.spawn_n(e_timed)
start = time.time()
eventlet.sleep()
print "eventlet _n timed (first)".ljust(30), (time.time() - start)
start = time.time()
eventlet.sleep()
print "eventlet _n timed (second)".ljust(30), (time.time() - start)
eventlet.sleep()
eventlet.sleep()
eventlet.sleep()
print
start = time.time()
for i in xrange(iterations):
gevent.spawn(g_simple)
print "gevent spawn".ljust(30), (time.time() - start)
start = time.time()
gevent.sleep()
print "gevent simple (first)".ljust(30), (time.time() - start)
start = time.time()
gevent.sleep()
print "gevent simple (second)".ljust(30), (time.time() - start)
gevent.sleep()
gevent.sleep()
gevent.sleep()
for i in xrange(iterations):
gevent.spawn(g_timed)
start = time.time()
gevent.sleep()
print "gevent timed (first)".ljust(30), (time.time() - start)
start = time.time()
gevent.sleep()
print "gevent timed (second)".ljust(30), (time.time() - start)
gevent.sleep()
gevent.sleep()
gevent.sleep()
print
start = time.time()
for i in xrange(iterations):
gevent.spawn_raw(g_simple)
print "gevent spawn_raw".ljust(30), (time.time() - start)
start = time.time()
gevent.sleep()
print "gevent _raw simple (first)".ljust(30), (time.time() - start)
start = time.time()
gevent.sleep()
print "gevent _raw simple (second)".ljust(30), (time.time() - start)
gevent.sleep()
gevent.sleep()
gevent.sleep()
for i in xrange(iterations):
gevent.spawn_raw(g_timed)
start = time.time()
gevent.sleep()
print "gevent _raw timed (first)".ljust(30), (time.time() - start)
start = time.time()
gevent.sleep()
print "gevent _raw timed (second)".ljust(30), (time.time() - start)
gevent.sleep()
gevent.sleep()
gevent.sleep()
print
start = time.time()
for i in xrange(iterations):
gogreen.coro.schedule(GoGreenWorker())
print "gogreen w/classes schedule".ljust(30), (time.time() - start)
start = time.time()
gogreen.coro.event_loop()
print "gogreen w/classes simple".ljust(30), (time.time() - start)
print
start = time.time()
for i in xrange(iterations):
gogreen.coro.spawn(gg_simple)
print "gogreen spawn".ljust(30), (time.time() - start)
start = time.time()
gogreen.coro.event_loop()
print "gogreen spawned simple".ljust(30), (time.time() - start)
if __name__ == '__main__':
main()
# greenhouse schedule 0.174571990967
# greenhouse simple (first) 0.813743114471
# greenhouse simple (second) 0.376886129379
# greenhouse timed (first) 1.59735798836
# greenhouse timed (second) 1.25055003166
#
# eventlet spawn 4.5378921032
# eventlet simple (first) 7.87027192116
# eventlet simple (second) 2.26500892639
# eventlet timed (first) 7.0302028656
# eventlet timed (second) 2.28249406815
#
# eventlet spawn_n 1.38494706154
# eventlet _n simple (first) 3.84733700752
# eventlet _n simple (second) 2.12895488739
# eventlet _n timed (first) 4.00279998779
# eventlet _n timed (second) 2.13083195686
#
# gevent spawn 1.85506606102
# gevent simple (first) 6.1101269722
# gevent simple (second) 0.0108499526978
# gevent timed (first) 5.76555609703
# gevent timed (second) 1.09197211266
#
# gevent spawn_raw 0.549421072006
# gevent _raw simple (first) 2.87146806717
# gevent _raw simple (second) 0.945069074631
# gevent _raw timed (first) 2.8474919796
# gevent _raw timed (second) 0.947130918503
#
# gogreen w/classes schedule 5.50345993042
# gogreen w/classes simple 1.76240301132
#
# gogreen spawn 5.29673886299
# gogreen spawned simple 1.88117599487
# tests were run on
# -----------------
# x86_64 Intel(R) Core(TM)2 Duo CPU P8400 @ 2.26GHz
# GNU/Linux 2.6.33-ARCH
# Python 2.6.5
# greenlet 0.3.1
# greenhouse master 0bdf7934
# eventlet 0.9.9
# gevent 0.12.2
# gogreen 1.0
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment