zoukankan      html  css  js  c++  java
  • pythonNet 09协程

    前情回顾
    1. 进程线程的区别和联系
       * 都是多任务编程
       * 一个进程包含多个线程
       * 都是动态的占有资源的,线程共享进程的资源
       * 进程比线程消耗资源更多
       * 进程空间独立使用特定的IPC,线程使用全局变量

    2. 服务器模型
      
       循环模型 : 同一时刻只能处理一个请求


       并发模型 : IO 并发 : 多个IO任务
                   多进程/多线程并发 : 任何任务
     
    3. 基于fork的多进程并发程序
        每当有一个客户端连接就创建一个新的进程

    4. ftp文件服务程序
    ***********************************************

    多线程并发

    threading 的多线程并发

    对比多进程并发:
        * 消耗资源较少
        * 线程应该更注意共享资源的操作
        * 在python中应该注意GIL问题,网络延迟较高,线程并   发也是一种可行的办法

    实现步骤
        1. 创建套接字,绑定监听
        2. 接收客户端请求,创建新的线程
        3. 主线程继续接收其他客户端连接
        4. 分支线程启动对应的函数处理客户端请求
        5. 当客户端断开,则分支线程结束

    cookie

    import traceback

    traceback.print_exc()
    功能 : 更详细的打印异常信息


    集成模块的使用
    python2 SocketServer
    python3 socketserver

    功能 : 通过模块的不同类的组合完成多进程/多线程 的           tcp/udp的并发

    StreamRequestHandler  处理tcp套接字请求
    DatagramRequestHandler  处理udp套接字请求

    TCPServer  创建tcp server
    UDPServer  创建udp server

    ForkingMixIn   创建多进程
    ForkingTCPServer -->  ForkingMinIn + TCPServer
    ForkingUDPServer -->  ForkingMinIn + UDPServer

    ThreadingMixIn  创建多线程
    ThreadingTCPServer --> ThreadingMinIn + TCPServer
    ThreadingUDPServer --> ThreadingMinIn + UDPServer
     

    HTTPServer  V2.0

    1. 接收客户端请求
    2. 解析客户端请求
    3. 组织数据,形成HTTP response
    4. 将数据发送给客户端

    升级
    1. 采用多线程并发接收多个客户端请求
    2. 基本的请求解析,根据请求返回相应的内容
    3. 除了可以请求静态网页,也可以请求简单的数据
    4. 将功能封装在一个类中

    技术点 :
    1. socket  tcp 套接字
    2. http协议的请求响应格式
    3. 线程并发的创建方法
    4. 类的基本使用


    协程基础

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

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


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


    优点 : 消耗资源少
            无需切换开销
     无需同步互斥
     IO并发性好

    缺点 : 无法利用计算机多核

    yield ---》 协程实现的基本关键字


    greenlet

    greenlet.greenlet()  生成协程对象
    gr.switch() 选择要执行的协程事件

    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导入之前使用

  • 相关阅读:
    Atitti 图像处理 图像混合 图像叠加 blend 原理与实现
    Atitit Gaussian Blur 高斯模糊 的原理and实现and 用途
    Atitit 图像处理 灰度图片 灰度化的原理与实现
    Atitit (Sketch Filter)素描滤镜的实现  图像处理  attilax总结
    Atitit 实现java的linq 以及与stream api的比较
    Atitit attilax在自然语言处理领域的成果
    Atitit 图像处理 常用8大滤镜效果 Jhlabs 图像处理类库 java常用图像处理类库
    Atitit 图像处理--图像分类 模式识别 肤色检测识别原理 与attilax的实践总结
    Atitit apache 和guava的反射工具
    atitit。企业的价值观 员工第一 vs 客户第一.docx
  • 原文地址:https://www.cnblogs.com/sky-ai/p/9847781.html
Copyright © 2011-2022 走看看