Python 网络编程 三

目录:

Python 网络编程 三

IO 的概念

IO:1. input 2. output

在内存中存在数据交换的操作都可以认为是输入输出
比如:
内存和磁盘交互  读写操作
内存和网络交互  recv  send

由IO划分的程序:

  1. IO密集型程序:程序执行中大量的IO操作,而较少的cpu运算。消耗cpu较少,运行时间长
  2. CPU密集型程序(计算密集型):程序中大量的操作都需要cpu运算,IO操作较少。消耗cpu大,运行速度快

IO 分类

  1. 所有种类: 阻塞IO 非阻塞IO IO多路复用 事件IO 异步IO …

  2. 阻塞IO : 默认形态 效率很低的一种IO情形

    阻塞情况 :* 因为某种条件没有达成造成的阻塞
    e.g. accept recv input

                     * 处理IO事件的时候耗时比较长形成阻塞
                     e.g.  文件的读写过程,网络数据发送过程
    
  3. 非阻塞IO : 通过修改IO事件的属性,使其变为非阻塞的状态。(改变了第一种阻塞的状况)
    通常和循环搭配使用,不断检测阻塞条件是否已经满足。

    s.setblocking()
    功能: 将套接字设置为非阻塞状态
    参数: bool 设置为False则表示设置为非阻塞

    超时检测
    将原本阻塞的函数,设置一个阻塞的最长时间,在规定时间内如果条件达到则正常执行,如果仍然阻塞则抛出异常
    s.settimeout(sec)
    功能 : 设置套接字超时时间
    参数 : 设置的时间

  4. IO多路复用

    1. 定义 : 同时监控多个IO事件,当哪个IO事件准备就绪就执行哪个IO事件。以此形成,多个IO事件都可以操作,不必诸个等待执行的效果。

    2. 准备就绪:IO事件即将发生的临界状态
      import select

      select —-》 windows linux unix
      poll —》 linux unix
      epoll –》 linux unix

    3. 格式:r, w, x = select(rlist, wlist, xlist[, timeout])

    4. 功能:监控IO事件,阻塞等待IO事件的发生
    5. 参数:rlist 列表 存放我们监控等待处理的IO事件
      wlist 列表 存放我们要主动处理的IO事件
      xlist 列表 存放如果发生异常需要我们处理的
      timeout 数字 超时时间
    6. 返回值:r 列表 rlist当中准备就绪的IO
      w 列表 wlist当中准备就绪的IO
      x 列表 xlist当中准备就绪的IO

      1. 注意事项 :
        1.在处理IO过程中不应该发生死循环(某个IO单独占有服务器)
        2.IO多路复用行了一种并发的效果,效率较高

位运算

  1. 按照二进制位进行操作运算
    &(按位与) |(按位或) ^(按位异或)
    <<(左移) >>(右移)

    
    11  1011 
    14  1110
    
    &   101000
    |   111111
    ^   0101  相同为0不同为1
    11 << 2  ==> 44   右侧补0 
    14 >> 2  ==> 3    挤掉低位的数字
    使用 : 1. 在做底层硬件的寄存器操作
            2. 在做标志位过滤时
  2. poll

    1. 创建poll对象
      p = select.poll()
    2. 添加关注对象
      p.register(s,POLLIN | POLLERR)
      p.unregister(s)

    3. poll IO事件类型分类

      POLLIN POLLOUT  POLLERR POLLHUP  POLLPRI  POLLVAL 
      rlist   wlist   xlist    断开   紧急处理  无效数据
    4. 进行监控

      1. 格式events = p.poll()
      2. 功能: 阻塞等待register的事件发生
      3. 返回值 : events 是一个列表,列表中每个元素表示准备就绪需要处理的IO
        [(fileno,event), (),()]
        描述符 具体什么就绪了
    5. 描述符地图{s.fileno(): s}

    6. 处理IO事件
  3. epoll

    1. 使用方法 : 代码基本与poll相同

      • 将生成对象的 poll() 函数 变为 epoll()
      • 将register注册IO事件时 关注的事件类别改为epoll类别
    2. 区别:
      epoll 效率要高于 poll和select
      epoll 的关注触发方式多一些

本地套接字

  1. linux下文件类型:
    b(块设备文件) c(字符设备文件) d(目录)
    -(普通文件) l(链接文件) s(套接字文件) p(管道文件)

  2. 作用 : 用于本地不同的程序间进行通信

  3. 本地套接字创建流程:

    1. 创建套接字对象
      sockfd = socket(AF_UNIX,SOCK_STREAM)
    2. 建立套接字文件
      sockfd.bind(path) 绑定一个文件
    3. 监听
    4. 接收发送消息
      os.path.exists(path)
      功能: 判断一个文件是否存在
      参数: 文件位置
      返回值: 存在返回True 否则返回False

    5. os.unlink() os.remove()
      功能:删除一个文件
      参数:要删除的文件

    6. 例子:

      In [2]: os.path.exists("./re")
      Out[2]: True
      In [3]: os.unlink("./re")
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值