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/'), ])

浙公网安备 33010602011771号