zoukankan      html  css  js  c++  java
  • 协程

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

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

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

    优点:消耗资源少。无需切换消耗资源,因为是在应用上记录,不需要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])
  • 相关阅读:
    功能测试--评论测试点
    airtest自动化测试工具使用
    jmeter录制脚本失败原因(windows为例)
    测试APP电量、内存、网络流量工具----GT
    Java--使用反编译工具,打开jar包,查看源码
    jmeter(图片进行base64加密发送)
    jmeter之永久性修改为中文显示界面方法
    jmeter之发送请求失败,乌龙---千万不要在请求体的写注释
    jmeter使用BeanShell进行简单的base64加密
    使用JS报错 xx is not defined at HTMLAnchorElement.onclick
  • 原文地址:https://www.cnblogs.com/zengsf/p/9664643.html
Copyright © 2011-2022 走看看