zoukankan      html  css  js  c++  java
  • eventlet 笔记

     1  _______________________________________
     2 | python process                        |
     3 |   _________________________________   |
     4 |  | python thread                   |  |
     5 |  |   _____   ___________________   |  |
     6 |  |  | hub | | pool              |  |  |
     7 |  |  |_____| |   _____________   |  |  |
     8 |  |          |  | greenthread |  |  |  |
     9 |  |          |  |_____________|  |  |  |
    10 |  |          |   _____________   |  |  |
    11 |  |          |  | greenthread |  |  |  |
    12 |  |          |  |_____________|  |  |  |
    13 |  |          |                   |  |  |
    14 |  |          |        ...        |  |  |
    15 |  |          |___________________|  |  |
    16 |  |_________________________________|  |
    17 |                                       |
    18 |   _________________________________   |
    19 |  | python thread                   |  |
    20 |  |_________________________________|  |
    21 |                 ...                   |
    22 |_______________________________________|
    23 
    24 eventlet.spawnxxx -> Timer -> next_timer
    25 evnetlet.sleep -> schedule_call_global -> hub.switch
    26 hub.switch -> greenlet.switch -> run -> prepare_timers 
    27 -> first_timers -> waiter -> poll
    28 read/write[eventlet.os] -> trampoline -> add -> listener
    29  _______________________________________
    30 | hub                                   |
    31 |        ____________________________   |
    32 |       |     listener               |  |
    33 |       |     greenlet               |  |
    34 |       |____________________________|  |
    35 |_______________________________________|
    36 
    37  _______________________________________
    38 | greenthread                           |
    39 |        ____________________________   |
    40 |       |     event                  |  |
    41 |       |     main                   |  |
    42 |       |____________________________|  |
    43 |_______________________________________|
     1 switch endpoint: eventlet.sleep, GreenThread.wait, acquire/release[event]
     2 wakeup wait: call[Timer] -> main[GreenThread] -> send[Event]
     3 
     4 note: 1. Only allow root greenlet to invoke eventlet.sleep
     5 
     6 Example debug coroutine:
     7 
     8 import eventlet
     9 from eventlet.green import urllib2
    10 from eventlet import debug
    11 
    12 debug.hub_listener_stacks(True)
    13 debug.hub_timer_stacks(True)
    14 #debug.hub_blocking_detection(True)
    15 
    16 urls = [
    17     #"https://www.google.com/intl/en_ALL/images/logo.gif",
    18     "http://python.org/images/python-logo.gif",
    19     #"http://us.i1.yimg.com/us.yimg.com/i/ww/beta/y3.gif",
    20 ]
    21 
    22 
    23 def fetch(url):
    24     print debug.format_hub_timers()
    25     #print debug.format_hub_listeners()
    26     body = urllib2.urlopen(url).read()
    27     return url, body
    28 
    29 pool = eventlet.GreenPool(200)
    30 for url, body in pool.imap(fetch, urls):
    31     print("got body from", url, "of length", len(body))
  • 相关阅读:
    hdu4734 F(x)
    hdu2089 不要62 两解
    luogu2602 [ZJOI2010]数字计数 两解
    lemon
    UVA1218 完美的服务 Perfect Service
    luogu HNOI2003消防局的设立
    uva10891 game of sum
    uva10635 Prince and Princess
    UVA1394 And Then There Was One
    uva10003切木棍
  • 原文地址:https://www.cnblogs.com/gaozhengwei/p/7428960.html
Copyright © 2011-2022 走看看