python中协程的优点

1.协程可以让程序停留在上一次被调用的位置.当程序停止时,去执行其他的程序。
优点:
(1)进程和线程都面临着内核态和用户态的切换问题而耗费许多切换时间,而协程就是用户自己控制切换的时机,不再需要陷入系统的内核态。
协程的执行效率非常高。因为子程序切换不是线程切换,而是由程序自身控制。因此,没有线程切换的开销,和多线程相比,线程数量越多,相同数量的协程体现出的优势越明显
(2)不需要多线程的锁机制。由于只有一个线程,也不存在同时写变量的冲突,在协程中控制共享资源不需要加锁,只需要判断数据的状态,所以执行效率远高于线程 ,对于多核CPU可以使用多进程+协程来尽可能高效率地利用CPU。

python中yield协程的实现:

def main():

    for i in range(10):

        #yield作用使程序在这里停止,并且当调用next方法时,把当前i的值返回。
        yield i

    #这里函数返回值,会在上面循环依次完成时被输出
    return "hello"


a = main()

while True:

    try:
        #通过next方法
        print(next(a))

    except Exception as e:
        #这个e异常存的是函数返回值
        print(e)
        break

python 中gevent 协程实现:


from gevent import monkey
import time
#这里让程序遇到暂停就贴换,去做其他事情
monkey.patch_all()


def demo1():

    while True:

        print("..1..")
        #让程序睡1秒再开始执行
        time.sleep(1)


def demo2():
    while True:
        print("..2..")
        # 让程序睡1秒再开始执行
        time.sleep(1)

def main():

    #准备协程、g1,g2
    g1=gevent.spawn(demo1)
    g2 = gevent.spawn(demo2)

    #开启协程1,2,协程只有被开始才会生效。
    g1.join()
    g2.join()

    #这里协程比较多时写成一般写成
    # gevent.joinall([gevent.spawn(demo1),gevent.spawn(demo2)])



if __name__ == '__main__':

    main()

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值