
回复
添加资源
添加资源将有机会获得更多曝光,你也可以直接关联已上传资源 去关联
简介
Python 脚本执行的时候不是很快,特别是 Python 下面的多线程机制,长久以来一直被大家所诟病。通常来说要让 Python 执行效率变高一般使用的方法包括:
本篇将简单介绍一下协程。
协程的基本原理
gevent 的基本原理来自于 libevent&libev。本质上 libevent 或者说 libev 都是一种事件驱动模型。这种模型对于提高 CPU 的运行效率,增强用户的并发访问非常有效。但是因为它本身是一种事件机制,所以写起来有点绕,不是很直观。所以,为了修正这个问题,有心人引入了用户侧上下文切换的机制。这就是说,如果代码中引入了带 IO 阻塞的代码时,lib 本身会自动完成上下文的切换,全程用户都是没有觉察的。这就是 gevent 的由来。
gevent 是一个第三方库,可以轻松通过 gevent 实现并发同步或异步编程。
使用
g = gevent.spawn(func,1,……,x=3,……)
创建一个协程对象 g ,spawn 括号内第一个参数是函数名,后面可以有多个参数(位置参数,关键字参数)。
g.join() # 等待结束
g.value # 拿到func的返回值。
实例1:
import gevent
def func1():
print('func1 begin')
gevent.sleep(3)
print('func1 end')
def func2():
print('func2 begin')
gevent.sleep(2)
print('func2 end')
def func3():
print('func3 begin')
gevent.sleep(2)
print('func3 end')
g1 = gevent.spawn(func1)
g2 = gevent.spawn(func2)
g3 = gevent.spawn(func3)
gevent.joinall([g1, g2, g3])