专栏首页python3python之selectors

python之selectors

selectors是select模块的包装器,ptython文档建议大部分情况使用selectors而不是直接使用selectors

样例代码如下

# -*- coding: utf-8 -*-
__author__ = 'fc'

import selectors
import socket
import time

def accept(sock:socket.socket, mask):
    conn, addr = sock.accept()
    print('client', addr, 'connected')
    conn.setblocking(False)
    sel.register(conn, selectors.EVENT_READ, oper)

def oper(sock:socket.socket, mask):
    if selectors.EVENT_READ & mask:
        print('ready to read')
        data = sock.recv(1024)
        if not data:
            print('client', sock.getpeername(), 'disconnnected')
            sel.unregister(sock)
            sock.close()
        else:
            print('received: ', data)
            sel.modify(sock, selectors.EVENT_WRITE, oper)
    elif selectors.EVENT_WRITE & mask:
        print('ready to write')
        msg = b'hello, friend'
        sock.send(msg)
        print('send: ', msg)
        sel.modify(sock, selectors.EVENT_READ, oper)


sel = selectors.DefaultSelector()
print(sel)
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0)
sock.bind(('', 60001))
sock.listen(5)
sock.setblocking(False)
sel.register(sock, selectors.EVENT_READ, accept)

while True:
    events = sel.select(10)
    if not events:
        print('timeout', time.strftime('%Y-%m-%d %H:%M:%S'))
    for key, mask in events:
        callback = key.data
        callback(key.fileobj, mask)

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Python时间处理

    py3study
  • python3 套接字练习

    py3study
  • 【代码】Python播放MP3音频文件

    py3study
  • Golang学习-第二篇 搭建一个简单的Go Web服务器

    正文 Go语言标准库 - net/http 在学习Go语言有一个很好的起点,Go语言官方文档很详细,今天我们学习的Go Web服务器的搭建就需要用到Go语言官方...

    李海彬
  • 【每日必python】第二期:数字格式化format操作

    在处理数字问题上,用到格式化的地方非常多,比如小数精度问题、数字补全操作、百分数表示等。

    周旋
  • 助力航天科工,奥创科技携国内顶级硬件厂商协助航天云网共建国家虚拟现实实验室

    VRPinea
  • 这个 Github 仓库因你而精彩

    我于今年 6 月份创建自己微信读者群。群组人数从一开始零星几人到现在的两百多号人。群里面的小伙伴都非常好学,经常来群里面讨论技术问题。我自己从中学到很多知识,也...

    猴哥yuri
  • Python3分析CSV数据

    with语句在语句结束时自动关闭文件对象。 使用csv模块reader函数创建文件读取对象filereader,读取输入文件中的行。 使用csv模块的wri...

    用户1250179
  • VSCode配置eslint

    在Vue.js项目中,使用的是eslint检查。 而在我写完代码后,cnpm run dev运行命令。。。然后悲剧了,一大堆报错!╮(╯▽╰)╭ 安装插件:Ve...

    用户1149564
  • 工信部:我国5G基站超13万个,5G应用集中在物联网

    近日,工信部部长苗圩在工业通信业发展情况新闻发布会上公布了我国5G建设的最新进展:2019年6月份,我国正式启动5G商用,到年底全国共建成5G基站超13万个。

    镁客网

扫码关注云+社区

领取腾讯云代金券