python中的协程详解

协程简介

定义:纤程,微线程.协程的本质是一个单线程程序,所以携程不能使用计算机多核资源

作用:能够高效得完成并发任务,占用较少的资源.因此协程的并发量较高

原理:

    通过记录应用层的上下文栈区,实现在运行中进行上下文跳转,达到可以选择性地运行想要运行的部分,以此提高程序的运行效率.

优点:消耗资源少 无需切换开销 无需同步互斥 IO并发性好

缺点:无法利用计算机多核

greenlet.greenlet() 生成协程对象

import greenlet

def test1():
    print(12)
    gr2.switch()
    print(34)
    gr2.switch()


def test2():
    print(56)
    gr1.switch()
    print(78)


#协程对象
gr1 = greenlet.greenlet(test1)
gr2 = greenlet.greenlet(test2)

gr1.switch()

#运行结果
'''
12
56
34
78
'''

gevent介绍

gevent将协程事件封装为函数
python中用 f= gevent.spawn(target,args)来参加协程。其中target为协程调用的方法,args为方法的参数。示例如下:

import gevent

def foo(a, b):
    print("a = %d,b = %d" % (a, b))
    gevent.sleep(2)
    print("Running foo again")


def bar():
    print("Running int bar")
    gevent.sleep(3)
    print("Running bar again")


#生成协程
f = gevent.spawn(foo, 1, 2)
g = gevent.spawn(bar)
#sleep(3)
print("===============")
gevent.joinall([f, g]) #回收协程
print("%%%%%%%%%%%%%%")

运行结果

===============
a = 1,b = 2
Running int bar
Running foo again
Running bar again
%%%%%%%%%%%%%%

‘’’
注意:设置协程阻塞,让协程跳转是gevent.sleep(),而不是time.sleep()
‘’’

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值