python coroutine preliminary --gevent library use and explain what a monkey patch monkey_patch

Features coroutine work is the experience blocking or time-consuming task switching, survival depends coroutine in the thread, the thread depends on the coroutine

  • It seems a little example of a problem
GEVENT Import, Time 

DEF kisscpc (NUM): 
    for I in Range (NUM): 
        Print ( " kiss under Chenpei Chang S% " % (I + . 1 ), gevent.getcurrent ()) 
    the time.sleep ( . 1 ) 

DEF kisscj ( NUM): 
    for I in Range (NUM): 
        Print ( " kiss% s of the drive strength " % (I + . 1 ), gevent.getcurrent ()) 
    the time.sleep ( . 1 ) 

DEF kissxxd (NUM): 
    for I in Range (NUM): 
        Print ( " kiss under Xu Xiaodong S% " % (I + . 1),gevent.getcurrent())
    time.sleep(1)

g1 = gevent.spawn(kisscj,3)
g2 = gevent.spawn(kisscpc,2)
g3 = gevent.spawn(kissxxd,5)
g1.join()
g2.join()
g3.join()

Output:

Kiss the first drive strength <Greenlet AT 0x7fe77eed7648 : kisscj ( 3 )> 
kiss under the second drive strength <Greenlet AT 0x7fe77eed7648 : kisscj ( 3 )> 
kiss 3 the drive strength <Greenlet AT 0x7fe77eed7648 : kisscj ( 3 ) > 
kiss under 1 Chenpei Chang <Greenlet aT 0x7fe77eed7a48 : kisscpc ( 2 )> 
kiss under 2 Chenpei Chang <Greenlet aT 0x7fe77eed7a48 : kisscpc ( 2 )> 
kiss under 1 Xu Xiaodong <Greenlet aT 0x7fe77eed7b48 : kissxxd ( . 5 )> 
kiss 2 Xu Xiaodong under the <Greenlet aT 0x7fe77eed7b48 : kissxxd (5 )> 
kiss 3 under Xu Xiaodong <Greenlet AT 0x7fe77eed7b48 : kissxxd ( 5 )> 
kiss section 4 Xu Xiaodong <Greenlet AT 0x7fe77eed7b48 : kissxxd ( 5 )> 
kiss 5 under Xu Xiaodong <Greenlet AT 0x7fe77eed7b48 : kissxxd ( 5 ) >

Seemingly failed to achieve such a result and we look forward to concurrent effect, the task is still executed step by step. The answer lies in the use of gevent time, everything must be related to the replacement of gevent

  • Time-consuming, blocking part of the library into realization gevent
GEVENT Import, Time 

DEF kisscpc (NUM): 
    for I in (NUM) Range: 
        Print ( " kiss under Chenpei Chang S% " % (I + . 1 ), gevent.getcurrent ()) 
        # the time.sleep ( . 1 ) 
        GEVENT. SLEEP ( . 1 ) 
DEF kisscj (NUM): 
    for I in (NUM) Range: 
        Print ( " kiss% s of the drive strength " % (I + . 1 ), gevent.getcurrent ()) 
        # the time.sleep ( . 1 ) 
        GEVENT .sleep ( 1 ) 
DEF kissxxd (NUM): 
    for i inRange (NUM): 
        Print ( " kiss under Xu Xiaodong S% " % (I + . 1 ), gevent.getcurrent ()) 
       # the time.sleep ( . 1 ) 
        gevent.sleep ( . 1 ) 
G1 = gevent.spawn (kisscj, . 3 ) 
G2 = gevent.spawn (kisscpc, 2 ) 
G3 = gevent.spawn (kissxxd, . 5 ) 
g1.join () 
g2.join () 
g3.join ()

Output:

Kiss the first drive strength <Greenlet AT 0x7f2af804e648 : kisscj ( . 3 )> 
kiss under 1 Chenpei Chang <Greenlet AT 0x7f2af804ea48 : kisscpc ( 2 )> 
kiss under 1 Xu Xiaodong <Greenlet AT 0x7f2af804eb48 : kissxxd ( . 5 )> 
Kiss under the second drive strength <Greenlet aT 0x7f2af804e648 : kisscj ( . 3 )> 
kiss under 2 Chenpei Chang <Greenlet aT 0x7f2af804ea48 : kisscpc ( 2 )> 
kiss under 2 Xu Xiaodong <Greenlet aT 0x7f2af804eb48 : kissxxd ( . 5 )> 
kiss under the third drive strength <Greenlet aT 0x7f2af804e648 : kisscj (3 )> 
kiss 3 under Xu Xiaodong <Greenlet AT 0x7f2af804eb48 : kissxxd ( 5 )> 
kiss section 4 Xu Xiaodong <Greenlet AT 0x7f2af804eb48 : kissxxd ( 5 )> 
kiss 5 under Xu Xiaodong <Greenlet AT 0x7f2af804eb48 : kissxxd ( 5 ) >

Yo ratio - this is what we look forward to!

However, for some early code, time-consuming part of each task is still possible using conventional code written (rather than gevent. Method name), which means we need to change the vast majority of the code of

At this time, the monkey patch comes in handy

GEVENT Import, Time
 from GEVENT Import Monkey 
monkey.patch_all () 
DEF kisscpc (NUM): 
    for I in (NUM) Range: 
        Print ( " kiss under Chenpei Chang S% " % (I + . 1 ), gevent.getcurrent ()) 
        the time.sleep ( . 1 ) 
        # gevent.sleep ( . 1 ) 
DEF kisscj (NUM): 
    for I in (NUM) Range: 
        Print ( " kiss% s of the drive strength " % (I + . 1 ), gevent.getcurrent () ) 
        the time.sleep ( 1 ) 
        # gevent.sleep ( 1 )
def kissxxd(num):
    for i in range(num):
        print ("吻了第%s下徐晓冬"%(i+1),gevent.getcurrent())
        time.sleep(1)
        #gevent.sleep(1)
g1 = gevent.spawn(kisscj,3)
g2 = gevent.spawn(kisscpc,2)
g3 = gevent.spawn(kissxxd,5)
g1.join()
g2.join()
g3.join()

Output:

吻了第1下程劲 <Greenlet at 0x7f97e4981948: kisscj(3)>
吻了第1下陈培昌 <Greenlet at 0x7f97e4981a48: kisscpc(2)>
吻了第1下徐晓冬 <Greenlet at 0x7f97e4981b48: kissxxd(5)>
吻了第2下程劲 <Greenlet at 0x7f97e4981948: kisscj(3)>
吻了第2下陈培昌 <Greenlet at 0x7f97e4981a48: kisscpc(2)>
吻了第2下徐晓冬 <Greenlet at 0x7f97e4981b48: kissxxd(5)>
吻了第3下程劲 <Greenlet at 0x7f97e4981948: kisscj(3)>
吻了第3下徐晓冬 <Greenlet at 0x7f97e4981b48: kissxxd(5)>
吻了第4下徐晓冬 <Greenlet at 0x7f97e4981b48: kissxxd(5)>
吻了第5下徐晓冬 <Greenlet at 0x7f97e4981b48: kissxxd(5)>

我们看到仅仅用了monkey.patch_all()就达到了期待的效果,而其他方面几乎没什么改变

 

Guess you like

Origin www.cnblogs.com/saintdingspage/p/11622740.html
Recommended