zoukankan      html  css  js  c++  java
  • 协程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)
  • 相关阅读:
    mysql 统计新增每天数据
    Oracle dg下掉一个从库
    rman全备脚本
    Linux Shell 统计一(行列)数值的总和及行、列转换
    pt工具加字段脚本
    MySQL慢日志切割邮件发送脚本
    MySQL主从复制邮件报警脚本
    读书清单
    数据库学习笔记
    JAVAEE学习笔记
  • 原文地址:https://www.cnblogs.com/TKOPython/p/12486425.html
Copyright © 2011-2022 走看看