• 协程


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

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

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

    优点:消耗资源少。无需切换消耗资源,因为是在应用上记录,不需要cpu。无需同步互斥。IO并发性好
    缺点:无法利用计算机多核

    gevent
      1.将协程事件封装为函数
      2.生成协程对象
      gevent.spawn(func, argv)
        功能:生成协程对象
        参数:func 协程函数
          argv 给协程函数传参
        返回值:返回协程对象
      3.回收协程
      gevent.joinall()
        功能: 回收协程
        参数; 列表 将要回收的协程放入列表

      gevent.sleep(n)
        功能: 设置协程阻塞,让协程跳转
        参数: n 阻塞时间

      from gevent import monkey
      monkey.patch_all()
        功能:修改套接字的IO阻塞行为
        *必须在socket导入之前使用

    import gevent
    #这两句一定要在socket上面
    from gevent import monkey
    monkey.patch_all()
    
    from socket import *
    from time import ctime
    
    def server(port):
        s = socket()
        s.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1)
        s.bind(("0.0.0.0", port))
        s.listen(5)
    
        while True:
            c, addr = s.accept()
            print("Connect from", addr)
    #       handler(c)   #循环服务器
            gevent.spawn(handler, c)   #协程服务器
    
    def handler(c):
        while True:
            data = c.recv(1024)
            if not data:
                break
            print(data.decode())
            c.send(ctime().encode())
        c.close()
    
    
    if __name__ == "__main__":
        server(8888)


    greenlet:这个协程库不好的地方就是要自己来控制跳转
      greenlet.greenlet() 生成协程对象
      gr.switch() 选择要执行的协程事件

    import gevent
    from time import sleep
    
    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 foo again")
    
    
    #生成协程
    
    f = gevent.spawn(foo, 1, 2)
    g = gevent.spawn(bar)
    
    sleep(2)
    
    gevent.joinall([f,g])
  • 相关阅读:
    双机调试环境部署
    VC++中通过MultiByteToWideChar将string|char*转换为wstring|wchar_t*
    Unicode环境下的类型转换
    SQL调优日记之发挥SQL性能与你的写法有关--对比三种方式实现相同功能
    从MS SQL删除大数据说开去
    Microsoft SQL Server Reporting Services (SSRS)报表技巧之在图表中增加参考线
    想个法子找出性能差的SQL
    MS SQL,数据库增长时众多表中谁是你关注的目标
    TSQL 日期处理总结
    投入.NET,我的第一篇BLOG
  • 原文地址:https://www.cnblogs.com/zengsf/p/9664643.html
Copyright © 2020-2023  润新知