• day18 io多路复用


    day18
    今天学习内容:
     
    1. io多路复用--select
    在win下 : io多路复用就是使用底层的select去进行对io句柄的监控
    通过select 可以进行server 和client 的句柄进行监控,当发生读写时,可以动态去处理。
     
         example:
              
    #!/usr/bin/env python
    #-*- encoding:utf-8 -*-
     
    import select
    import socket
     
    sk = socket.socket()
    sk.bind(('127.0.0.1',9999))
    sk.listen()
     
    inp = [sk]
    inps = []
    oups = []
    msg_dict = {}
    inpp = []
    while True:
        #参数1 是监控socket句柄列表,一旦服务端/客户端句柄发生动作则处理
        #参数2 如果存在句柄,则会对句柄进行一个处理,譬如当读取到数据,则将客户端的链接添加到inps,在下一个循环中去处理接受到的数据
        #参数3 是当发生socket错误时,该参数接收到发生错误的句柄
        #参数4 指定io的一个循环等待时间,这里时最多1秒
        r,w,e = select.select(inp,inps,inp,1)
     
        for s in r:
            #如果是服务端接受链接则添加到inp的监听队列
            if s == sk:
                conn,address = s.accept()
                inp.append(conn)
                msg_dict[conn]=[]
            else:
                try:
                    msg_dict[s].append(str(s.recv(1024),encoding='utf-8'))
                    inps.append(s)
                except Exception as ex:
                    print(ex)
                    inp.remove(s)
     
        for s1 in w:
            print(msg_dict[s1][0])
            ret = msg_dict[s1][0]+'好'
            del msg_dict[s1][0]
            s1.sendall(bytes(ret,encoding='utf-8'))
            inps.remove(s1)
     
        for s2 in e:
            inp.remove(s2)
     
     
    1. 还有socketserver源码分析
    2. ftp作业讲解
  • 相关阅读:
    33、VCF格式
    10、Perl5中19个最重要的文件系统工具
    9、perldoc文档阅读器
    32、Differential Gene Expression using RNA-Seq (Workflow)
    31、NGS 常用分析软件
    16、SGE作业调度系统的简介
    8、非root权限下安装perl以及perl模块
    31、SAM文件中flag含义解释工具--转载
    30、 bowtie和bowtie2使用条件区别及用法
    C#中委托。
  • 原文地址:https://www.cnblogs.com/zxcv-/p/7967532.html
Copyright © 2020-2023  润新知