iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Python:简单select模块使用
  • 730
分享到

Python:简单select模块使用

模块简单Python 2023-01-31 01:01:56 730人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

select 多并发Socket 例子 #!/usr/bin/env python #coding:utf-8 import select import socket import Queue listen_addr=('0

select 多并发Socket 例子

#!/usr/bin/env python
#coding:utf-8

import select
import socket
import Queue


listen_addr=('0.0.0.0',8000)
#监听服务器
server=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
try:
    server.bind(listen_addr)
    server.setblocking(0)
except socket.error as e:
    print e
    exit(0)

server.listen(500)

print("starting up on %s port %s"%listen_addr)

inputs=[server,]  #监测服务器端,毕竟server本身也是一个fd,文件描述符

outputs=[]    #这里存放的是内核返回的活跃的客户端连接,就是服务器需给send data的客户端连接


message_queue={}

#开始循环监测事件
while True:
    print("waiting for next event...")   #

    readable,writeable,exceptionl=select.select(inputs,outputs,inputs)#如果没有任何fd就绪,那么程序一直会阻塞在这里
    "可以recv  可以send  exception"
    for s in readable:  #每一个s就是一个socket
        "处理新的客户端连接,并统一接受他们的数据"
        if s is server:   #由于上面我们server自己页当成一个fd放在了inputs列表里,传给了select,如果这个s是select代表这个fd就绪
            #如果server就绪,那就说明又有新的客户端的连接到了
            client,addr=s.accept()
            print("new connection from",addr)
            client.setblocking(0)

            """有客户端连接进来就把这个连接先放在select列表中,
                现在这些列表中的连接都会交给select去监听,如果列表中有一个客户端发来数据
                那么这个客户端所连接的对应fd就会转变成就绪状态,select就会将这个就绪状态的连接
                返回给用户程序的(即readable中)
                最后循环这个readable列表,取出这个连接,并只接受这些数据暂时存放
            """
            inputs.append(client)

            #往字典中添加一个队列用于暂时存放这个客户端连接传来的数据
            message_queue[client]=Queue.Queue()

        #如果不是server,那么就是原来连接的客户端有数据来了
        else:
            #接受
            data=s.recv(1024)
            if data:
                print("receive come from %s",s.getpeername()[0],data)
                message_queue[s].put(data)  #收到的数据先放到对应的queue中,一会返回数据给客户端
                if s not in outputs:
                    outputs.append(s)  #为了不影响处理与其他客户端的连接。这里不立刻返回数据给客户端, 先放着,等会一起处理发送数据

            else: #如果没有收到客户端的数据,表示客户端断开了
                print("client connection break")

                if s in outputs:
                    outputs.remove(s) #清除已经断开的连接,没不会有信息发送给客户端了
                inputs.remove(s)

                del message_queue[s]


    for s in writeable:   #现在处理没有处理完客户端连接,就是接着前面向客户端发送数据
        try:
            next_msg=message_queue[s].get_nowait() #从队列中删除这个项目并伴随没有阻塞的返回这个项目(get)

        except Queue.Empty:
            print("client [%s] ")%(s.getpeername()[0]),
            print("queue is empty")
            outputs.remove(s)

        else:
            print("sending msg to [%s]"%(s.getpeername()[0]),next_msg) #输出客户端的信息
            s.send(next_msg.upper())

    for s in exceptionl:   #处理出现异常的连接
        print("handling exception for",s.getpeername())
        inputs.remove(s)
        if s in outputs:
            outputs.remove(s)
        s.close()
        del message_queue[s]

--结束END--

本文标题: Python:简单select模块使用

本文链接: https://www.lsjlt.com/news/184745.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Python:简单select模块使用
    select 多并发socket 例子 #!/usr/bin/env python #coding:utf-8 import select import socket import Queue listen_addr=('0...
    99+
    2023-01-31
    模块 简单 Python
  • python tkinter模块的简单使用
    目录1.任务要求 2.简单设计 3.模块实现4.总结由于一些小原因,被迫开始了tkinter一次实战演练。在此做一些记录,总结以及给自己留一些轮子哈哈哈哈哈哈 tkinter 是 P...
    99+
    2024-04-02
  • Python webargs 模块的简单使用
    目录一、安装二、基础特性2.1. 使用2.1.1 通过装饰器2.1.2 通过函数2.2 参数检查2.3 检查失败处理2.4 嵌套参数三、高级特性3.1 自定义location3.2 ...
    99+
    2024-04-02
  • python的md5模块使用非常简单
     python的md5模块使用非常简单,包括以下几个函数: md5.new([arg]) 返回一个md5对象,如果给出参数,则相当于调用了update(arg) md5.updte(arg) ...
    99+
    2023-01-31
    模块 简单 python
  • Pythonoptparse模块及简单使用
    目录参数说明函数说明简单使用optparse,是一个更够让程序设计人员轻松设计出简单明了、易于使用、符合标准的Unix命令例程式的Python模块,生成使用和帮助信息。 参数说明 d...
    99+
    2022-12-08
    Python optparse模块 Python optparse使用
  • python模块itsdangerous简单介绍
    安装 你可以从PyPI上直接安装这个库: pip install itsdangerous 适用案例 在取消订阅某个通讯时,你可以在URL里序列化并且签名一个用户的ID。这种情况下...
    99+
    2022-11-16
    python模块itsdangerous python itsdangerous模块 python itsdangerous
  • Python常用的模块和简单用法
    目录1、random 随机模块2、matplotlab.pyplot 作图模块3、mpl_toolkits.mplot3d 绘制3D图模块 1、random 随机模块 import ...
    99+
    2024-04-02
  • python glom模块的使用简介
    目录安装简单使用复杂用法搞定麻烦需求总结工欲善其事,必先利其器!我们想要更轻松更有效率地开发,必须学会一些“高级”技能。前不久看到一位 Python 高僧的代码,其中使用了一个短小精...
    99+
    2024-04-02
  • python中的logging模块的简单应用和高级使用
    目录简单使用日志格式输出到文件处理程序(Handler)过滤器(Filter)高级使用日志回溯日志轮换日志缓冲总结简单使用 在 Python 中,可以使用内置的 logging 模块...
    99+
    2023-05-17
    python logging模块 logging应用
  • Python模块怎么实现简单的调用
    这篇文章给大家分享的是有关Python模块怎么实现简单的调用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。python可以做什么Python是一种编程语言,内置了许多有效的工具,Python几乎无所不能,该语言通...
    99+
    2023-06-14
  • python标准库之time模块的语法与简单使用
    目录表示时间的方式 1. 调用语法: 2. time概述3. 时间获取4. 时间格式化(将时间以合理的方式展示出来)5. 程序计时应用6. 示例总结表示时间的方式 时间戳表示法: ...
    99+
    2024-04-02
  • Python中os模块的简单使用及重命名操作
    前言 OS模块虽然基础的时候已经学过了,但是谁让本人属于那种不用立马就忘的人呢,所以在在下爬取某个不可名状的男人都喜欢的网站的时候,在遇到爬取下来的数据需要保存的时候,就需要用到O...
    99+
    2024-04-02
  • 使用Python和OpenSSL简单模拟
    本文使用Python和文件系统模拟保密通信的整个过程 本阶段完成系统初始状态模拟,直接看代码 import os,shutil from Crypto.Cipher import DES3,XOR def xorencode...
    99+
    2023-01-31
    简单 Python OpenSSL
  • 简单谈谈Python中的模块导入
    目录模块与包 __import__ 模块缓存 imp 与 importlib 模块 惰性导入 总结参考资料本文不讨论 Python 的导入机制(底层实现细节),仅讨论模块与包,以及导...
    99+
    2024-04-02
  • python 绘图模块matplotlib的使用简介
        上周对线上某几个磁盘进行了fio硬盘性能测试,测试完成之后的结果需要绘制成图像展示出来。我在官网上查找了一下fio自带的命令fio_genera...
    99+
    2024-04-02
  • 使用Python模块:struct模块
    Python没有提供直接的将用户定义的数据类型和文件IO关联起来的功能,但是它提供了struct库(是一个内置库)——我们可以以二进制模式来写这些数据(有趣的是,它真的是设计来讲文本数据写为缓存的) 1)bytes、str...
    99+
    2023-01-31
    模块 Python struct
  • Python第三方常用模块openpyxl的简单介绍
    目录openpyxl创建文件Workbook() —创建 excel 文件Workbook.create_sheet() —创建 excel 工作簿Works...
    99+
    2024-04-02
  • Python模块——unittest 单
     unittest是python单元测试框架,又叫做PyUnit。之所以称为框架是它代替开发人员完成了一些调用、IO等与单元测试无直接关系的支撑代码,让开发人员可以专注与测试用例的编写,简化单元测试工作。 单元测试是一种基本的,由开发人员(...
    99+
    2023-01-31
    模块 Python unittest
  • python paramiko模块简介
    python paramiko模块简介一:简介    paramiko是用python语言写的一个模块,遵循SSH2协议,支持以加密和认证的方式,进行远程服务器的连接。    由于使用的是python这样的能够跨平台运行的语言,所以所有py...
    99+
    2023-01-31
    模块 简介 python
  • 如何最简单、通俗地理解Python模块?
    说简单点,Python模块就是带.py后缀的可执行文件,用来重复调用变量和函数。比方说,你在数据分析过程中反复需要读取CSV文件,除了使用pandas等现成的库方法外,还可以自己写一个模块用于调用。# -*- coding: utf-8 -...
    99+
    2023-05-20
    Python 数据分析 模块
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作