协程

1.概念

协程又称纤程,轻型线程,指同一线程中能够互相切换的多个任务.

协程是代码级别的,对于操作系统来说并不可见.

由于协程之间的切换是代码级别的,不涉及到操作系统,不需要操作系统去进行切换,所有协程更加高效.

协程能够提高线程对CPU的利用率.

协程的特点:

  1. 与进程,线程比起来,协程不存在数据不安全的问题.
  2. 协程不能利用多核的性能.

协程是python中比较好的工具.

2.基本模型

#生产者消费者模型
def consumer():        #消费者
	while True:
		i = yield

def producer():        #生产者
	c = consumer()
	next(c)
	for i in range(10000):
		c.send(i)

producer()            

3.gevent

gevent是一个第三方,能够实现协程的功能.

他的作用在于一旦程序进入阻塞状态就启动协程.

gevent的实现依赖于greenlet模块(同为第三方模块,但是只能实现进程间的切换,并不能遇到阻塞就切换)

gevent模块下的monkey.patch_all()能够使gevent识别所有的阻塞而不仅仅是gevent下的阻塞.

例:

from gevent import monkey;monkey.patch_all()

import gevent

def func(i):
    print(i ** 2)
    gevent.sleep(0.1)

for i in range(100):
    print(i)
    g = gevent.spawn(func,i)
    gevent.sleep(0.1)


其他方法:
gevent_obj.join() 阻塞,直到协程对象完成

gevent.joinall(list)阻塞,直到列表中所有的携程对象完成 
    

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值