zoukankan      html  css  js  c++  java
  • Green the world :使用monkey_patch

    eventlet的monkey_patch 用于绿化一些python的模块,看看以下的样例就明确了

    urls = ["http://www.haha.mx/joke/1292935",
            "http://www.baidu.com"]
    import eventlet
    from eventlet.green import urllib2
    import time


    def fetch(url):
      try:
          print "opening0", url
          time.sleep(1)
          body = urllib2.urlopen(url).read()
          print "done with0", url
          return url, body
      except urllib2.HTTPError:
          return "",""
    def fetch1(url):
      try:
          print "opening1", url
          body = urllib2.urlopen(url).read()
          print "done with1", url
          return url, body
      except urllib2.HTTPError:
          return "",""

    eventlet.monkey_patch()
    pool = eventlet.GreenPool(100)
    pool.spawn(fetch,urls[0])
    pool.spawn(fetch1,urls[1])
    pool.waitall()
    执行结果:
    opening0 http://www.haha.mx/joke/1292935
    opening1 http://www.baidu.com
    done with1 http://www.baidu.com
    done with0 http://www.haha.mx/joke/1292935
    monkey_patch函数原型:
    monkey_patch(os=None, select=None, socket=None, thread=None, time=None, psycopg=None)
    程序中在pool中创建两个绿色线程用于处理fetch和fetch1,fetch和fetch1不同的是fetch中调用了time.sleep(1),并且使用eventlet.monkey_patch()对time模块进行了绿化,从执行结果能够看出,先处理的处理的fetch,只是在fetch函数用调用time.sleep(1)将执行权利交给了hub,然后接着执行fetch1,假设不使用monkey_patch的话time.sleep(1)会堵塞。这就是monke_patch的奇妙之处,它在程序開始的时候调用相当于一个开关,并且能够通过monkey_patch的參数指定要绿化的模块。
  • 相关阅读:
    [hihoCoder] #1093 : 最短路径·三:SPFA算法
    [hihoCoder] #1089 : 最短路径·二:Floyd算法
    [LeetCode] Number of Islands
    PRML5-神经网络(1)
    CUDA2.4-原理之性能优化及浮点运算
    PRML1-引言
    PGM1.1-简介
    AI1.1-人工智能史
    数学-矩阵计算(4)两种布局
    数学-矩阵计算(2)矩阵函数微积分前奏
  • 原文地址:https://www.cnblogs.com/gcczhongduan/p/4297470.html
Copyright © 2011-2022 走看看