python--协程

概念

协程:协助程序,线程和进程都是抢占式特点,线程和进程的切换我们是不能参与的。 而协程是非抢占式特点,协程也存在着切换,这种切换是由我们用户来控制的。 协程主解决的是IO的操作。协程,又称微线程,纤程。英文名Coroutine。

协程优点

优点1: 协程极高的执行效率。因为子程序切换不是线程切换,而是由程序自身控制,因 此,没有线程切换的开销,和多线程比,线程数量越多,协程的性能优势就越明显。
优点2: 不需要多线程的锁机制,因为只有一个线程,也不存在同时写变量冲突,在协程中 控制共享资源不加锁,只需要判断状态就好了,所以执行效率比多线程高很多。 因为协程是一个线程执行,那怎么利用多核CPU呢?最简单的方法是多进程+协程,既充分利 用多核,又充分发挥协程的高效率,可获得极高的性能。

yield的简单实现

import time
def consumer(name):
    """
    这是一个生成器,调用的时候才执行
    :param name: 消费者的名字
    :return: 包子
    """
    print("消费者准备吃包子-----")
    while True:
        new_baozi=yield #接受调用生成器的值
        print("%s吃第%d个包子"%(name,new_baozi))
        time.sleep(1)
def producer(name):
    r=con.__next__()
    r=con2.__next__()
    count=1
    while True:
        print("%s正在生产第%s个包子和第%d个包子"%(name,count,count+1))
        #调用生成器并且发送数据
        con.send(count)
        con2.send(count+1)
        count+=2

if __name__ == '__main__':
    con=consumer("翠花")
    con2=consumer("王大锤")
    p=producer("大厨")

greenlet模块

greenlet是一个用C实现的协程模块,相比与python自带的yield,它可以使你在任意函数之 间随意切换,而不需把这个函数先声明为generator 安装 :pip3 install greenlet。如果引入的时候还是报错,使用pycharm进行下载安装, 选择 file --> settings --> Project:项目名称 --> Project Interpreter–>…

greenlet模块

  • gr1=greenlet(目标函数)
  • gr1.switch() 切换执行
from greenlet import greenlet
def work1():
    print(12)
    #3.切换到test()函数中
    gr2.switch()
    print(45)
    gr2.switch()
def work2():
    print(89)
    gr1.switch()
    print(43)
#1.将要执行的函数封装到greenlet对象中
gr1=greenlet(work1)
gr2=greenlet(work2)
#2.想先执行哪个函数就可以使用对象,swith()方法进行执行
gr1.switch()

gevent模块

我们需要下载gevent模块
打开pycharm左下角这个图标在这里插入图片描述
输入 pip install gevent,会出现这个画面,那么恭喜你,下载完成
在这里插入图片描述
代码就不给您看了,有点小问题
那么我们今天的python协议学习就结束了,感谢大家观看

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值