Skip to content

Instantly share code, notes, and snippets.

@goosemo
Created March 13, 2012 06:40
Show Gist options
  • Select an option

  • Save goosemo/2027286 to your computer and use it in GitHub Desktop.

Select an option

Save goosemo/2027286 to your computer and use it in GitHub Desktop.
#CPU Bound
#serialrun took 1389.423 ms
#geventrun took 1511.781 ms
#parallelrun took 343.161 ms
#threadedrun took 2853.815 ms
#
#
#IO Bound
#serialrun took 1908.858 ms
#geventrun took 24857.715 ms
#parallelrun took 1185.798 ms
#threadedrun took 2064.390 ms
#!/usr/bin/env python
import multiprocessing
import threading
import time
import gevent
import socket
from gevent import socket as gsocket
def print_timing(func):
def wrapper(*arg):
t1 = time.time()
res = func(*arg)
t2 = time.time()
print '%s took %0.3f ms' % (func.func_name, (t2-t1)*1000.0)
return res
return wrapper
def counter():
for i in xrange(1000000):
pass
def socketer(sckt):
urls = ['www.google.com', 'www.example.com', 'www.python.org']
for i in urls*100:
sckt.gethostbyname(i)
@print_timing
def serialrun(x, cpu=True):
for i in xrange(x):
if cpu:
counter()
else:
socketer(socket)
@print_timing
def geventrun(x, cpu=True):
proclist =[]
for i in xrange(x):
if cpu:
g = gevent.Greenlet(counter)
else:
g = gevent.Greenlet(socketer, gsocket)
proclist.append(g)
g.start()
for i in proclist:
i.join()
@print_timing
def parallelrun(x, cpu=True):
proclist = []
for i in xrange(x):
if cpu:
p = multiprocessing.Process(target=counter)
else:
p = multiprocessing.Process(target=socketer, args=[socket])
proclist.append(p)
p.start()
for i in proclist:
i.join()
@print_timing
def threadedrun(x, cpu=True):
threadlist = []
for i in xrange(x):
if cpu:
t = threading.Thread(target=counter)
else:
t = threading.Thread(target=socketer, args=[socket])
threadlist.append(t)
t.start()
for i in threadlist:
i.join()
if __name__ == '__main__':
print("CPU Bound")
for run in [serialrun, geventrun, parallelrun, threadedrun]:
run(50)
print("\n")
print("IO Bound")
for run in [serialrun, geventrun, parallelrun, threadedrun]:
run(50,False)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment