• python选择器selectors


     1 import selectors   #  常用于非阻塞的socket的编程中
     2 import threading
     3 import socket
     4 import logging
     5 
     6 FORMAT = '%(asctime)s %(threadName)s %(thread)d %(message)s'  # 日志格式
     7 logging.basicConfig(format=FORMAT,level=logging.INFO)
     8 
     9 def accept(sock:socket.socket,mask):  # 接受
    10     conn,raddr = sock.accept()
    11     conn.setblocking(False)
    12     key = selector.register(conn,selectors.EVENT_READ,read)
    13     logging.info(key)
    14 
    15 def read(conn:socket.socket,mask):   # 读数据
    16     data = conn.recv(1024)
    17     msg = 'msg is {}'.format(data.decode())
    18     conn.send(msg.encode())
    19 
    20 selector = selectors.DefaultSelector()  # 选择器  选择最佳实现,是当前平台上可用的最高效实现的别名
    21 sock = socket.socket()
    22 sock.bind(('127.0.0.1',8080))
    23 sock.listen()
    24 logging.info(sock)
    25 sock.setblocking(False)  # 设置非阻塞
    26 key = selector.register(sock,selectors.EVENT_READ,accept)  # 注册到选择器
    27 logging.info(key)
    28 
    29 e = threading.Event()  # 类实现事件对象。
    30 
    31 def select(e):
    32     while not e.is_set():
    33 
    34         events = selector.select()
    35 
    36         print('========')
    37 
    38         for key,mask in events:
    39 
    40             logging.info(key)
    41 
    42             logging.info(mask)
    43 
    44             callback = key.data
    45 
    46             callback(key.fileobj,mask)
    47 threading.Thread(target=select,args=(e,),name='select').start()
    48 
    49 def main():
    50     while not e.is_set():
    51         cmd = input('>>>')
    52         print("1111111")
    53         if cmd.strip() == 'quit':
    54             e.set()
    55             fobjs = []
    56 
    57             logging.info('{}'.format(list(selector.get_map().items())))
    58             for fd ,key in selector.get_map().items():
    59                 print(fd)
    60                 print(key)
    61                 fobjs.append(key.fileobj)
    62             for fobj in fobjs:
    63 
    64                 selector.unregister(fobj)
    65 
    66                 fobj.close()
    67             selector.close()
    68         else:
    69             print("22")
    70 
    71             logging.info('{}'.format(list(selector.get_map().items())))
    72 
    73 if __name__ == '__main__':
    74     main()
    import selectors   #  常用于非阻塞的socket程中
    import threading
    import socket
    import logging

    FORMAT = '%(asctime)s %(threadName)s %(thread)d %(message)s' # 日志格式
    logging.basicConfig(format=FORMAT,level=logging.INFO)

    def accept(sock:socket.socket,mask): # 接受
    conn,raddr = sock.accept()
    conn.setblocking(False)
    key = selector.register(conn,selectors.EVENT_READ,read)
    logging.info(key)

    def read(conn:socket.socket,mask): # 读数
    data = conn.recv(1024)
    msg = 'msg is {}'.format(data.decode())
    conn.send(msg.encode())

    selector = selectors.DefaultSelector() # 选择选择最佳实现,是前平台上可用的最高效实现
    sock = socket.socket()
    sock.bind(('127.0.0.1',8080))
    sock.listen()
    logging.info(sock)
    sock.setblocking(False) # 置非阻塞
    key = selector.register(sock,selectors.EVENT_READ,accept) # 选择
    logging.info(key)

    e = threading.Event() # 类实现事件象。

    def select(e):
    while not e.is_set():

    events = selector.select()

    print('========')

    for key,mask in events:

    logging.info(key)

    logging.info(mask)

    callback = key.data

    callback(key.fileobj,mask)
    threading.Thread(target=select,args=(e,),name='select').start()

    def main():
    while not e.is_set():
    cmd = input('>>>')
    print("1111111")
    if cmd.strip() == 'quit':
    e.set()
    fobjs = []

    logging.info('{}'.format(list(selector.get_map().items())))
    for fd ,key in selector.get_map().items():
    print(fd)
    print(key)
    fobjs.append(key.fileobj)
    for fobj in fobjs:

    selector.unregister(fobj)

    fobj.close()
    selector.close()
    else:
    print("22")

    logging.info('{}'.format(list(selector.get_map().items())))

    if __name__ == '__main__':
    main()
  • 相关阅读:
    Blink示例程序
    arduino入门笔记
    Opentrains 1519 G——最小圆覆盖
    最小圆覆盖入门
    最小球覆盖——模拟退火&&三分套三分套三分
    DAO,Service,Controller各层之间的关系
    史上最全的SpringMVC学习笔记
    pom.xml
    Tomcat入门指南
    tomcat架构
  • 原文地址:https://www.cnblogs.com/countryboy666/p/14442350.html
Copyright © 2020-2023  润新知