pgup12 发表于 2018-8-9 07:45:45

python monkey_patch浅析

# cat monkey_patch_test.py  
#!/usr/bin/env python
  
import eventlet
  
eventlet.monkey_patch()
  

  
from eventlet.green import urllib2
  
import time
  

  
urls = ["http://www.tudou.com",
  
      "http://www.baid.com"
  
       ]
  

  
def test_1(url):
  
    try:
  
      print "open tudou"
  
      time.sleep(5)
  
      urllib2.urlopen(url).read()
  
      print "done open tudou"
  
    except urllib2.HTTPError:
  
      return
  

  
def test_2(url):
  
    try:
  
      print "open baidu"
  
      urllib2.urlopen(url).read()
  
      print "done open baidu"
  
    except urllib2.HTTPError:
  
      return
  

  
pool = eventlet.GreenPool(100)
  
pool.spawn(test_1, urls)
  
pool.spawn(test_2, urls)
  
pool.waitall()    # 等待所有绿色线程执行结束
  

  
当test_1中time.sleep被调用到时,会将运行权利交给了hub,然后接着执行test_2,如果不使用monkey_patch的话time.sleep(1)会阻塞。
  
你可以注释掉eventlet.monkey_patch()这行代码,然后再看下运行结果。
页: [1]
查看完整版本: python monkey_patch浅析