python 协程

1.协程又称微进程,在多线程进行线程切换时,会有一定的耗时,但是协程是单线程,在一个代码中切换进行,所以没有线程切换的开销,线程数量越多,协程优势越明显

  当程序中存在大量不需要CPU的操作时(IO),适用于协程

2.greenlet  协程的基本流程

from greenlet import greenlet

def func1():
    print('func1 start')
    g2.switch()
    print('return funcl')
    g2.switch()
    print('func1 end')
    g2.switch()

def func2():
    print('func2 start')
    g1.switch()
    print('return func2')
    g1.switch()
    print('func2 end')

g1 = greenlet(func1)
g2 = greenlet(func2)
g1.switch()

3.gevent 高级模块,遇到等待自动切换

import gevent
def func1():
    print('func1 start')
    gevent.sleep(0)
    print('func1 over')

def func2():
    print('func2 start')
    gevent.sleep(0)
    print('func2 over')

gevent.joinall([
    gevent.spawn(func1),
    gevent.spawn(func2),
])

遇到IO操作自动切换

import gevent
import requests

def func(url):
    res = requests.get(url)
    print(url,len(res.text))


gevent.joinall([
    gevent.spawn(func, 'https://www.python.org/'),
    gevent.spawn(func,'https://www.yahoo.com/'),
    gevent.spawn(func,'https://www.baidu.com'),
    gevent.spawn(func,'http://www.sina.com'),
    gevent.spawn(func,'http://www.163.com'),
    gevent.spawn(func, 'https://github.com/'),
])

 

posted @ 2017-05-08 23:57  1916  阅读(86)  评论(0)    收藏  举报