协程greenlet与gevent模块

'''
定义:协程是一种用户态的轻量级线程
好处:方便切换控制流,简化编程模型
高并发+高扩展性+低成本:一个CPU支持上万的协程都不是问题。所以很适合用于高并发处理
无需原子操作锁定及同步的开销
无需线程上下文切换的开销

缺点:
无法利用多核资源:协程的本质是个单线程
协程需要和进程配合才能运行在多CPU上
进行阻塞(Blocking)操作(如IO时)会阻塞掉整个程序


# greenlet是一个用C实现的协程模块,它可以使你在任意函数之间随意切换
'''
from greenlet import greenlet

def test1():
    print("123")
    g2.switch()
    print("iii")
    g1.switch()

def test2():
    print("222")
    g1.switch()

g1 = greenlet(test1)
g2 = greenlet(test2)
g1.switch()


#Gevent 是一个第三方库,可以轻松通过gevent实现并发同步或异步编程,在gevent中用到的主要模式是Greenlet

import gevent
import time

start = time.time()
def fun1():
    print("aaaaaaa")
    gevent.sleep(2)
    print("cccccccc")

def fun2():
    print("bbbbbbb")
    gevent.sleep(1)
    print("dddddddd")

gevent.joinall([
    gevent.spawn(fun1),
    gevent.spawn(fun2)
])

end = time.time()
print(start- end)

猜你喜欢

转载自www.cnblogs.com/TKOPython/p/12486425.html