协程

主进程的子进程,子进程有它自己的主线程,也就是说还可以开辟子线程
迭代器   (__iter__方法:把类变成可迭代,方法里边创建迭代器和__next__方法:获取下一个值)
生成器    结合列表推导式  g = (x * 2 for x in range(3))
         注意yield 和 return  yield:代码执行到这个,看到yield暂停,等到再启动的时候执行yield后边的代码
                            如果后边出现return,return的本质是执行到的时候给代码返回一个值,然后return后边
                            的内容不再执行,可是协程yield还在等待再次重复执行那,所以需要有异常捕获,raise抛出异常
                            才能保证yield的正常执行
迭代:可以用for循环遍历


小点

from collections import Iterable  从collections中引入Iterable


isinstance(参数1,参数2)   参数1:要判断的东西
                        参数2:判断的条件                       
isinstance(5,int)   判断5是int型
isinstance([3,4,5,6],Iterable)  判断列表是可遍历对象(也就是可以迭代对象)


yield是python内置函数


import greenlet   # greenlet封装的是yield,为了让程序员更好的使用协程


import gevent   #  gevent封装的是greentlet, gevent可以完成协程之间自动切换








greenlet  使用


创建协程   g1 = greenlet.greenlet(函数名)    开始协程  g1.switch()


gevent   使用


创建协程   g1 = gevent.spawn(函数名,参数)     gevent比较强大创建函数spawn直接就可以启动    spawn:引起


小点 : 
1. gevent.getcurrent() 获取当前协程
2. gevent不识别系统延时  也就是time模块     想让它识别,打补丁 from gevent import monkey      monkey.patch_all()
     或者使用  gevent.sleep()
3.让主线程等待   g1.join()  g2.join()   或者    gevent.joinall([g1, g2])

import greenlet
import time


def work1():
    for i in range(4):
        print('听歌')
        time.sleep(0.2)
        g2.switch()


def work2():
    for i in range(8):
        print('补作业')
        time.sleep(0.3)
        g1.switch()




if __name__ == '__main__':
    g1 = greenlet.greenlet(work1)
    g2 = greenlet.greenlet(work2)
    g1.switch()





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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值