zoukankan      html  css  js  c++  java
  • python之selectors模块

    python之selectors模块

    selectors模块是在python3.4版本中引进的,它封装了IO多路复用中的select和epoll,能够更快,更方便的实现多并发效果。

      官方文档见:https://docs.python.org/3/library/selectors.html

      以下是一个selectors模块的代码示范:

    #!/usr/bin/python
    #Author:sean
     
    import selectors
    import socket
    #selectors模块默认会用epoll,如果你的系统中没有epoll(比如windows)则会自动使用select
    sel = selectors.DefaultSelector()   #生成一个select对象
     
    def accept(sock, mask):
        conn, addr = sock.accept()  # Should be ready
        print('accepted', conn, 'from', addr)
        conn.setblocking(False) #设定非阻塞
        sel.register(conn, selectors.EVENT_READ, read)  #新连接注册read回调函数
     
    def read(conn, mask):
        data = conn.recv(1024)  # Should be ready
        if data:
            print('echoing', repr(data), 'to', conn)
            conn.send(data)
        else:
            print('closing', conn)
            sel.unregister(conn)
            conn.close()
     
    sock = socket.socket()
    sock.bind(('localhost', 8080))
    sock.listen()
    sock.setblocking(False)
    sel.register(sock, selectors.EVENT_READ, accept)    #把刚生成的sock连接对象注册到select连接列表中,并交给accept函数处理
     
    while True:
        events = sel.select()   #默认是阻塞,有活动连接就返回活动的连接列表
        #这里看起来是select,其实有可能会使用epoll,如果你的系统支持epoll,那么默认就是epoll
        for key, mask in events:
            callback = key.data     #去调accept函数
            callback(key.fileobj, mask) #key.fileobj就是readable中的一个socket连接对象
  • 相关阅读:
    b_lc_第k个排列(暴搜 / 数学剪枝)
    sql语句大全(2)
    经典SQL语句大全
    存储过程格式
    经典SQL语句大全(实例)非常不错的和excel等文档实例结合的sql
    触发器MSSQL常用操作
    最好的C#学习网站
    C# 反射入门知识
    MSSQL经典语句
    一些很酷的.Net技巧
  • 原文地址:https://www.cnblogs.com/leijiangtao/p/11805001.html
Copyright © 2011-2022 走看看