简单了解python协程的相关知识
Python  /  管理员 发布于 7年前   148
什么是协程
协程是python种一种实现多任务的方式,他是一种比线程更加小的单元,占用更小的执行单元(资源),为啥说他是一个执行单元,因为他自带CPU上下文,这样在合适gr的时机,可以把一个协程切换到另一个协程,只要在这个过程中保存和恢复cpu上下文那么程序还是可以运行的
通俗的理解: 一个线程中的某个函数,可以在任何地方保存当前函数的一些临时变量,然后切换到另一个函数中运行,并且切换的次数以及社么时候再切换回来是可控的
协程和线程的差异
在实现多任务时,线程会自己欢子一些数据,操作系统切换时需要恢复数据,所以线程恢复比较耗性能
协程底层原理(举例)
'''1,协程的实现原理,底层通过 yield 实现'''def work1(): #工作任务 for i in range(10): print('work1----{}'.format(i)) yield idef work2(): for i in range(10): print('work2----{}'.format(i)) yield idef work3(): for i in range(10): print('work3----{}'.format(i)) yield ig1 = work1()g2 = work2()g3 = work3()while True: #循环调用生成器实现任务切换 try: print(next(g1)) print(next(g2)) print(next(g3)) except StopIteration : pass break
协程 greenlet
python -m pip install greenlet
示例
'''1,展示greenelent ,不能自动切换需要手动切换'''import greenletdef work1(): for i in range(10): print('work1----{}'.format(i)) g2.switch() #切换到g2def work2(): for i in range(10): print('work2----{}'.format(i)) g1.switch() #切换到g1g1 = greenlet.greenlet(work1) #返回协程对象g2 = greenlet.greenlet(work2)g1.switch() #启动开关
执行顺序
gevent
greenlet 已经实现了协程,但是还是人工切换,gevent 提供了自动切换功能,其原理是执行过程中遇到IO操作,自动切换
'''协程gevent IO操作会切换'''import geventdef work1(): # 工作任务 for i in range(10): print('work1----{}'.format(i)) gevent.sleep(0.5)def work2(): for i in range(10): print('work2----{}'.format(i)) gevent.sleep(0.5)g1 = gevent.spawn(work1) #指定工作函数g2 = gevent.spawn(work2) #指定工作函数g1.join() #等待协程执行完成再往下走g2.join()
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
122 在
学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..123 在
Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..原梓番博客 在
在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..博主 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..1111 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
Copyright·© 2019 侯体宗版权所有·
粤ICP备20027696号