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]