python协程的实现_python协程实现

参考:

协程的概念

协程,又称微线程,纤程。英文名Coroutine。

协程是程序级别的,由程序自己决定如何调度。

协程的概念:

在子程序执行过程中可以中断去执行别的子程序,而别的子程序也可以中断回来继续执行之前的子程序,这个过程就称为协程。

类似与yield操作。

协程的优点:

无需线程切换上下文,避免了无意义的调度。可以提高程序性能。

无需原子操作锁定及同步的开销

方便切换控制流,简化编程模型

高并发+高扩展性+低成本:一个CPU支持上万的协程都不是问题。所以很适合用于高并发处理。

协程的缺点:

无法利用多核资源。

进行阻塞(Blocking)操作(如IO时)会阻塞掉整个程序

Python3协程的实现

用yield实现:

def consumer(name):

count = 12

print('开始吃包子...')

# while True:

bone = 0

while bone <= count:

print('%s需要包子' % name)

bone = yield # 接收send发送的数据

print('%s吃了%s个包子' % (name, bone))

def producer(obj1):

obj1.send(None) # 必须先发送None,触发协程运行

for i in range(3):

print('[producer]正在做%s个包子' % i)

obj1.send(i)

if __name__ == '__main__':

con1 = consumer('消费者A') # 创建消费者对象, 此时程序并未执行,只是返回了一个生成器对象。

producer(con1)

print("协程结束")

greenlet模块实现程序间切换执行

from greenlet import greenlet

def test1():

print 12

gr2.switch()

print 34

def test2():

print 56

gr1.switch()

print 78

gr1 = greenlet(test1)

gr2 = greenlet(test2)

gr1.switch()

# 输出为:

#     12 56 34

gevent框架

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值