Python的Select模块

【Python】select 模块 在深入探讨I/O多路复用之前,我们必须首先建立对现代网络通信核心模式的理解。绝大多数的互联网服务都构建在客户端-服务器(Client-Server) 模型之上。这个模型将通信过程划分为两个明确的角色:这种模型是分布式系统和网络应用程序的基石。在这样的模型中,服务器通常需要同时服务成百上千甚至上万的客户端连接。如何高效、稳定地处理这些并发连接,是设计高性能网络服务时面临的首要挑战。在计算机系统中,I/O(Input/Output)操作指的是数据在计算机内存与外部设备(如磁盘、网络接口卡、键盘、显示器等)之间传 阅读详情

Python的Select模块

Python中的select模块专注于I/O多路复用,提供了select poll epoll三个方法(其中后两个在Linux中可用,windows仅支持select),另外也提供了kqueue方法(freeBSD系统),select 方法允许你响应不同 socket 的多个事件以及其它不同事件。例如你可以让 select 在某个 socket 有数据到达时,或者当某个 socket 可以写数据时,又或者是当某个 socket 发生错误时通知你,好处是你可以同时响应很多 socket 的多个事件。
select 方法的三个参数都是 list 类型,分别代表读事件、写事件、错误事件,同样方法返回值也是三个 list,包含的是哪些事件(读、写、异常)满足了
简单使用:
服务端:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2017/7/27 13:11
# @File    : s1.py

"""
select的使用
"""
import socket,select

#服务器的创建
server=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
server.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
server.bind(('',1022))
server.listen(5)
print 'start'
inputs=[server]
while 1:
    #select的原型为(rlist,wlist,xlist[,timeout]),
    # 其中rlist是等待读取的对象,
    # wlist是等待写入的对象,
    # xlist是等待异常的对象,
    rs,ws,es=select.select(inputs,[],[],1)
    for r in rs:
        if r is server:
            clientsock,clientaddr=r.accept()
            inputs.append(clientsock)
        else:
            data=r.recv(1024)
            if not data:
                inputs.remove(r)
            else:
                print data,'[]'
客户端:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2017/7/27 13:11
# @File    : c1.py


import socket
host='127.0.0.1'
port=1022
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.connect((host,port))
s.send('hello from client')
s.close()

总结一下,运行到这个语句时

rs,ws,es=select.select(inputs,[],[])

select函数阻塞程序运行,监控inputs中的套接字,当其中有套接字满足可读的条件(第一个参数为可读,如果是第二个参数则为可写),则把这个套接字返回给rs,然后程序继续运行。

至于套接字怎么才算可读呢?搜索可知,当套接字缓冲区大于1byte时,就被标记为可读。也就是说,当套接字收到客户端发来的数据,就变成可读,然后select就会把这个套接字取出来,进入下一步程序。

深入理解python中的select模块 主要介绍了python中select模块的相关资料,Python中的select模块专注于I/O多路复用,提供了select、poll和epoll三个方法,文中还详细的介绍了select和poll,因为poll与select相差不大,所以本文不作介绍,需要的朋友们下面来一起看看吧。 立即下载

相关推荐

保姆级教程:用Dify+DeepSeek API打造你的私人股票分析助手(附完整配置流程)

本文提供了一份详细的教程,指导用户如何利用Dify低代码平台和DeepSeek API构建一个私人股票分析助手。内容涵盖从环境准备、Dify部署、DeepSeek模型配置,到设计智能体工作流和编写高效提示词的完整流程,旨在帮助投资者和开发者快速打造专属的AI投资分析工具。

weixin_29079671的博客 636

python功能模块详述_深入理解python中的select模块

简介Python中的select模块专注于I/O多路复用,提供了select poll epoll三个方法(其中后两个在Linux中可用,windows仅支持select),另外也提供了kqueue方法(freeBSD系统)select方法进程指定内核监听哪些文件描述符(最多监听1024个fd)的哪些事件,当没有文件描述符事件发生时,进程被阻塞;当一个或者多个文件描述符事件发生时,进程被唤醒。...

weixin_39710179的博客 487

Nestjs框架: 集成 Prisma

NestJS官方文档提供了两种数据库相关的内容:Techniques下的数据库板块和Recipes下的具体数据库集成方案。本文以Prisma为例,演示了如何集成Prisma到NestJS项目中。首先创建NestJS项目并安装Prisma,配置MySQL数据库连接。通过Prisma CLI初始化项目、定义数据模型并生成迁移文件。接着创建Prisma模块和服务,配置Prisma客户端连接数据库。最后在控制器中注入PrismaService实现数据查询。整个过程包含了Docker启动MySQL、Prisma模型定

Wang的专栏 1293

python模块大全下载_Python及其常用模块库下载及安装

一、Python下载:https://www.python.org/downloads/二、Python模块下载:http://www.lfd.uci.edu/~gohlke/pythonlibs/#pymssql(日常常用包都有)Python模块(第三方库): https://pypi.python.org/pypi三、Python库安装(一):方法1: 单文件模块直接把文件拷贝到 $pyth...

weixin_39791653的博客 3614

深入解析数据通信中的码元速率与比特率:从基础到实战应用

本文深入解析了数据通信中的核心概念码元速率与比特率,通过生动的比喻和公式(比特率=波特率×log₂(M))揭示其本质关系。文章结合BPSK、QPSK、16QAM等调制技术,剖析了从4G/5G到LoRa等实战场景中如何权衡速率、距离与可靠性,并提供了软考真题解析与系统设计建议,帮助读者从理论到应用全面掌握数据速率优化。

weixin_29324877的博客 213

别再瞎试了!用Python+正交设计,5分钟搞定你的多因素实验方案

本文介绍了如何利用Python和正交设计高效优化多因素实验方案。正交设计通过精心设计的正交表,用最少的实验次数覆盖所有因素的水平组合,显著提升实验效率。文章详细讲解了正交设计的核心优势、Python实现工具链、实验实施与数据分析方法,以及高级技巧与常见问题解决方案,帮助读者快速掌握这一强大的实验优化技术。

weixin_42526087的博客 331

【Python】 select模块详解 所有程序猿必看!!!

二是如果服务器端关闭了socket, 一旦在调用socket的相关方法都会报错, 不管socket是不是用不同的容器存储的(意思是说list_1存储了socket1, list_2存储了socket1, 我关闭了socket1, 两者都不能在调用这个socket了)第一个参数就是服务器端的socket, 第二个是我们在运行过程中存储的客户端的socket, 第三个存储错误信息。重点是在返回值, 第一个返回的是可读的list, 第二个存储的是可写的list, 第三个存储的是错误信息的。

2401_85855266的博客 1922

Xilinx Vitis arm-xilinx-eabi-gcc.exe: error: *.c: Invalid argument

This problem may be a bugof version 2021.1 only. Unfortunately, I'm just currently using this version. After Build Project: Find where this Makefile is through "make: Leaving directory" information. For me, it is located atZynq_CPU_wrapper_hw_platfo...

Ayka的博客 6660

自学Python 61 使用select模块实现多路I/O复用

在Python语言中,select模块专注于实现I/O多路复用功能,提供了 select()、poll()和epoll()三个功能方法。其中后两个方法在Linux 系统中可用,Windows仅支持sellect()方法,另外也提供了kqueue()方法供freeBSD系统使用。模块select在 Socket 编程中占据比较重要的地位。

江南赴艽野的博客 860

基于 STM32 的手持式安检金属探测器设计与实现

【代码】基于 STM32 的手持式安检金属探测器设计与实现。

weixin_42300449的博客 899

SerDes系列之如何选择AC耦合电容

交流耦合电容用于隔离PCB互连时的直流分量(Common-mode voltage),同时传递交流分量(Voltage swing),其作用类似于一个高通滤波器,但是,如果电容容值选取不当,使用过程中会产生信号质量问题,典型的应用场景:当包含相同的长串1或0的NRZ数据应用于该高通滤波器时,会发生低频电压跌落,导致低频模式相关抖动(PDJ)。

一只豌豆象的博客 2350

python中select模块_python中的select模块

介绍:Python中的select模块专注于I/O多路复用,提供了select poll epoll三个方法(其中后两个在Linux中可用,windows仅支持select),另外也提供了kqueue方法(freeBSD系统)首先列一下,sellect、poll、epoll三者的区别selectselect最早于1983年出现在4.2BSD中,它通过一个select()系统调用来监视多个文件描...

weixin_39688378的博客 664

ComfyUI报错ModuleNotFoundError: No module named ‘comfy.options‘

好家伙,我一想我刚刚好像用了pip安装了comfy模块,不会是和ComfyUI自带的comfy模块产生冲突了吧。(3)还有的说是项目不是最新版,叫更新到最新版本的,好家伙,我报错之前根本没更新也没错,突然就报错的。(4)还有的说没有comfy.options这部分代码,叫自己去拉一个,我一看也有啊。我也不知道啥时候脑抽风去装这么个东西的,幸好我聪明机智,一眼就知道了。看把我气的,然后网上搜集各种资料,一个一个去试。

满目星辰 5155

python中的select模块介绍

python中的select模块 介绍: Python中的select模块专注于I/O多路复用,提供了select poll epoll三个方法(其中后两个在Linux中可用,windows仅支持select),另外也提供了kqueue方法(freeBSD系统) select方法: 进程指定内核监听哪些文件描述符(最多监听1024个fd)的哪些事件,当没有文件描述符事件发生时,进程被阻...

zhubaoJay的博客 2485

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

python中select模块_python select 模块详解

python select 模块详解要理解 select.select 模块其实主要就是要理解它的参数, 以及其三个返回值select() 方法接收并监控 3 个通信列表, 第一个是所有的输入的 data, 就是指外部发过来的数据, 第 2 个是监控和接收所有要发出去的 data(outgoing data), 第 3 个监控错误信息在网上一直在找这个 select.select 的参数解释, 但...

weixin_39554170的博客 529

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

python select模块详解

要理解select.select模块其实主要就是要理解它的参数, 以及其三个返回值。 select()方法接收并监控3个通信列表, 第一个是所有的输入的data,就是指外部发过来的数据,第2个是监控和接收所有要发出去的data(outgoing data),第3个监控错误信息 在网上一直在找这个select.select的参数解释, 但实在是没有, 哎...自己硬着头皮分析了一下。 read...

python学习者的博客 856

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

python select模块_python select模块详解

要理解select.select模块其实主要就是要理解它的参数, 以及其三个返回值。select()方法接收并监控3个通信列表, 第一个是所有的输入的data,就是指外部发过来的数据,第2个是监控和接收所有要发出去的data(outgoing data),第3个监控错误信息在网上一直在找这个select.select的参数解释, 但实在是没有, 哎...自己硬着头皮分析了一下。readable, ...

weixin_39540020的博客 174

python中select用法_Python select及selectors模块概念用法详解

1. select模块针对select,要先理解其他几个概念:文件描述符:文件描述符在形式上是一个非负整数。实际上,它是一个索引值,指向内核为每一个进程所维护的该进程打开文件的记录表。当程序打开一个现有文件或者创建一个新文件时,内核向进程返回一个文件描述符。内核空间:Linux简化了分段机制,使得虚拟地址与线性地址总是一致,因此,Linux的虚拟地址空间也为0~4G。Linux内核将这4G字节的空...

weixin_39635432的博客 2923

python中select模块_python中的selectors模块

它的功能与linux的epoll,还是select模块,poll等类似;实现高效的I/O multiplexing, 常用于非阻塞的socket的编程中; 简单介绍一下这个模块,更多内容查看 python文档:https://docs.python.org/3/library/selectors.html1. 模块定义了一个 BaseSelector的抽象基类, 以及它的子类,包括:Select...

weixin_39862871的博客 195

python select模块_基于python select.select模块通信的实例讲解

要理解select.select模块其实主要就是要理解它的参数, 以及其三个返回值。select()方法接收并监控3个通信列表, 第一个是所有的输入的data,就是指外部发过来的数据,第2个是监控和接收所有要发出去的data(outgoing data),第3个监控错误信息在网上一直在找这个select.select的参数解释, 但实在是没有, 哎...自己硬着头皮分析了一下。readable, ...

weixin_39548740的博客 297

python select模块_python中的select模块

介绍:Python中的select模块专注于I/O多路复用,提供了select poll epoll三个方法(其中后两个在Linux中可用,windows仅支持select),另外也提供了kqueue方法(freeBSD系统)select方法:进程指定内核监听哪些文件描述符(最多监听1024个fd)的哪些事件,当没有文件描述符事件发生时,进程被阻塞;当一个或者多个文件描述符事件发生时,进程被唤...

weixin_39928818的博客 96

python select模块_Python select模块学习

select 是常用的异步socket 处理方法一般用法:# iwtd,owtd,ewtd 分别为需要异步处理的读socket队列, 写socket队列(一般不用), 和错误socket队列, 返回事件的读写和错误socket队列il,ol,el =select(iwtd,owtd,ewtd[,timeout])for sock inil:#read the sockfor sock inol:#...

weixin_39781326的博客 206

python中select模块_Python下的select模块及方法解释-阿里云开发者社区

Python中有一个select模块,其中提供了:select、poll、epoll三个方法,分别调用系统的 select,poll,epoll 从而实现IO多路复用。Windows Python:提供: selectMac Python:提供: selectLinux Python:提供: select、poll、epoll注意:网络操作、文件操作、终端操作等均属于IO操作,对于windows只...

weixin_39984201的博客 213
上一篇: Python的Socket模块
下一篇: Python基于Socket实现简单聊天室
Coder_py
博客等级 码龄10年 106粉丝 258原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值