title: why python gevent is slower than serial ?
body: <p>i am using <a href="http://www.gevent.org/" rel="nofollow">gevent</a> to preform concurrent download.<br>
  based on <a href="https://bitbucket.org/denis/gevent/src/tip/examples/concurrent_download.py#cl-4" rel="nofollow">this</a> example this is the code:</p>
  
  <pre><code>import gevent
  from gevent import monkey
  
  urls = ['https://www.djangoproject.com/','http://www.nytimes.com/','http://www.microsoft.com']
  monkey.patch_all()
  
  import urllib2
  from datetime import datetime
  
  def print_head(url):
      print ('Starting %s' % url)
      data = urllib2.urlopen(url).read()   
      print ('%s: %s bytes: %r' % (url, len(data), data[:50]))
  
  startTime = datetime.now()
  jobs = [gevent.spawn(print_head, url) for url in urls]
  gevent.joinall(jobs)
  totalTime = datetime.now() - startTime
  print "Total time: %s" % totalTime
  </code></pre>
  
  <p>my problem is that the above code takes much longer than the serial version and in most cases it is timed out. here is the serial version which is much faster:</p>
  
  <pre><code>import urllib2
  from datetime import datetime
  
  urls = ['https://www.djangoproject.com/','http://www.nytimes.com/','http://www.microsoft.com']
  
  def print_head(url):
      print ('Starting %s' % url)
      data = urllib2.urlopen(url).read()
      print ('%s: %s bytes: %r' % (url, len(data), data[:50]))
  
  startTime = datetime.now()    
  for url in urls:
      try:
          print_head(url)
      except:
          print 'ops EXCEPTION :('
  
  totalTime = datetime.now() - startTime
  print "Total time: %s" % totalTime
  </code></pre>