协程简介
定义:纤程,微线程.协程的本质是一个单线程程序,所以携程不能使用计算机多核资源
作用:能够高效得完成并发任务,占用较少的资源.因此协程的并发量较高
原理:
通过记录应用层的上下文栈区,实现在运行中进行上下文跳转,达到可以选择性地运行想要运行的部分,以此提高程序的运行效率.
优点:消耗资源少 无需切换开销 无需同步互斥 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()
‘’’