import gevent
import random
import time
def task(pid):
"""
Some non-deterministic task
"""
for i in range(1000):
random.randint(0,20)
def synchronous():
for i in range(1,10000):
task(i)
def asynchronous():
threads = [gevent.spawn(task, i) for i in xrange(10000)]
gevent.joinall(threads)
print('Synchronous:')
t = time.time()
synchronous()
diff = time.time() -t
print "diff is %f" %diff
print('Asynchronous:')
t = time.time()
asynchronous()
diff = time.time() -t
print "diff is %f" %diff
结果:
Synchronous:
diff is 22.333482
Asynchronous:
diff is 22.422071
2.IO bound
import gevent.monkey
gevent.monkey.patch_socket()
import gevent
import urllib2
import time
def fetch(pid):
response = urllib2.urlopen('http://127.0.0.1:8080/')
result = response.read()
return result
def synchronous():
for i in range(1,100):
fetch(i)
def asynchronous():
threads = []
for i in range(1,100):
threads.append(gevent.spawn(fetch, i))
gevent.joinall(threads)
print('Synchronous:')
t = time.time()
synchronous()
diff = time.time() - t
print "diff is %f" %diff
print('Asynchronous:')
t = time.time()
asynchronous()
diff = time.time() - t
print "diff is %f" %diff
结果为:
Synchronous:
diff is 0.791572
Asynchronous:
diff is 0.997519