Gevent-自动挡切换

Gevent:

Gevent 是一个第三方库,可以轻松通过gevent实现并发同步或异步编程,在gevent中用到的主要模式是Greenlet, 它是以C扩展模块形式接入Python的轻量级协程。 Greenlet全部运行在主程序操作系统进程的内部,但它们被协作式地调度。在greenlet 中用switch调度。

例子1:

import gevent

def foo():
    print('Running in foo')
    gevent.sleep(2) #遇到sleep会被切换走
    print('Explicit context switch to foo again')

def bar():
    print('Explicit context to bar')
    gevent.sleep(1) #又切换到上面,来回切换,直到sleep(1)结束。
    print('Implicit context switch back to bar')

gevent.joinall([gevent.spawn(foo),gevent.spawn(bar),]) #列表的形式启动2个协程

 运行结果:

Running in foo
Explicit context to bar
Implicit context switch back to bar
Explicit context switch to foo again

 

例子2:

import gevent

def foo():
    print('Running in foo')
    gevent.sleep(2)
    print('Explicit context switch to foo again')

def bar():
    print('Explicit context to bar')
    gevent.sleep(1)
    print('Implicit context switch back to bar')

def func3():
    print('running in func3')
    gevent.sleep(0) #没有卡住,但是会触发一次切换
    print('running in func3 again')

gevent.joinall([gevent.spawn(foo),gevent.spawn(bar),gevent.spawn(func3)]) #列表的形式启动2个协程

 运行结果:三个之间来回切换foo-->bar--->func3,总共需要花费2s。哪个快就先执行完哪个。

C:\abccdxddd\Oldboy\python-3.5.2-embed-amd64\python.exe C:/abccdxddd/Oldboy/Py_Exercise/Day10/自动io切换.py
Running in foo
Explicit context to bar
running in func3
running in func3 again
Implicit context switch back to bar
Explicit context switch to foo again

 

posted on 2017-08-16 10:53  momo8238  阅读(214)  评论(0编辑  收藏  举报