Py学习  »  Python

Python实现TCP协议套接字多路复用

Python小屋 • 3 年前 • 271 次点击  

推荐图书:

《Python程序设计开发宝典》,ISBN:978-7-302-47210-0,董付国,清华大学出版社

图书详情(京东)

董付国老师所有图书均提供配套教学资源。

==============

首先,我们来看一个场景:一位老师在机房给60位学生讲完一个案例之后,布置了一个限时完成的小作业,学生完成后老师前去检查并进行打分。老师应该如何高效完成这个任务呢?

方案一:轮询。老师布置完作业之后,就开始在机房里一圈一圈不停地转,按座位顺序逐个询问学生是否已完成。如果已完成就检查完成情况进行打分,然后到下一位同学;如果该同学没有完成就跳过去,询问下一位同学。如果有同学已完成但老师还没问到他,就在座位上等着,老师仍按原来的顺序逐个询问和检查,直到到达该同学时再检查他的作业。容易得知,这样的方式效率很低,并且资源极度浪费。

方案二:创建分身(多线程/多进程)。老师布置完作业之后,瞬间创建60个分身,60个分身同时以移形换影大法到达每个同学身后,每个分身负责一位同学,当该同学做完之后,分身立刻检查打分,然后本体收回这个分身。这样的方式,每个同学的作业可以立刻得到检查,但是每个分身的功力都会比本体弱一点,并且每创建一个分身就会带走本体的一部分能量值,这会对老师的身体健康造成一定影响,如果创建太多的分身会导致本体资源(CPU、内存、端口号、带宽)耗尽而崩溃,本体崩溃后所有分身都会无法工作甚至彻底消散。

方案三:多路复用。老师布置完作业后,端坐于讲台之上,机房内所有同学的状态尽收眼底,每当有同学完成作业时,刚刚发出一个眼神,老师已经瞬移到同学身边,检查完该同学作业之后,老师再回到讲台端坐并等待下一位同学完成作业。如果检查作业耗时较长,为避免学生等待时间过长,可以考虑创建几个分身,几个分身同时端坐于讲台之上,根据学生的完成情况在机房内瞬移、穿梭。

=================

Python标准库selector和selectors支持套接字的多路复用,使得可以在同一个线程中监听多个套接字的IO请求。其中selector相对来说较为底层,一般建议直接使用selectors。

模拟场景:

服务器同时接收和处理多个客户端发来的数据,输出收到的数据并向客户端发送确认信息。

服务端代码:


客户端代码:


运行情况:


多线程版本客户端代码:


运行情况:



温馨提示
关注本公众号“Python小屋”,通过菜单“最新资源”==>“历史文章”可以快速查看分专题的1000篇技术文章列表(可根据关键字在页面上搜索感兴趣的文章),通过“最新资源”==>“微课专区”可以免费观看500节Python微课,通过“最新资源”==>“培训动态”可以查看近期Python培训安排,通过“最新资源”==>“教学资源”可以查看Python教学资源。
---董付国老师Python系列图书---
友情提示:不建议购买太多,最好先通过京东、当当、天猫查阅图书了解目录和侧重点,然后再选择购买适合自己的书。
(1)《Python程序设计(第2版)》(ISBN:978-7-302-43651-5),清华大学出版社,2016年8月出版,2019年度清华大学出版社畅销图书
(2)《Python可以这样学》(ISBN:978-7-302-45646-9),清华大学出版社,2017年2月
(3)《Python程序设计基础(第2版)》(ISBN:978-7-302-49056-2)清华大学出版社,2018年1月出版,2019年度清华大学出版社畅销图书
(4)《中学生可以这样学Python》(ISBN:978-7-302-48039-6)清华大学出版社
(5)《Python程序设计开发宝典》(ISBN:978-7-302-47210-0)清华大学出版社,2018年10月
(6)《玩转Python轻松过二级》(ISBN:978-7-302-49916-9)清华大学出版社,2018年5月
(7)《Python程序设计基础与应用(ISBN:978-7-111-60617-8),机械工业出版社,2018年9月
(8)Python程序设计实验指导书》(ISBN:9787302525790),清华大学出版社,2019年4月
(9)《Python编程基础与案例集锦(中学版)(ISBN:978-7-121-35539-4),电子工业出版社,2019年4月
(10)大数据的Python基础》(ISBN:978-7-111-62455-4),机械工业出版社,2019年5月
(11)译作《Python程序设计》,机械工业出版社(华章),2018年11月
(12)繁体版《Python也可以这样学》,台湾博硕文化股份有限公司,2017年10月出版,本书为《Python可以这样学》在台湾发行的繁体版,两本书内容一样,不建议重复购买
(13)《Python程序设计实例教程》(ISBN:978-7-111-63198-9),机械工业出版社
(14)《Python数据分析、挖掘与可视化》(ISBN:978-7-115-52361-7),人民邮电出版社,2019年12月

Python相关课程教材选用参考与建议
董付国老师Python在线课程资源使用方法
董付国老师6本Python教材PDF版免费阅读
《Python数据分析、挖掘与可视化》前3章书稿PDF免费阅读
《Python程序设计基础与应用》前3章书稿PDF免费阅读
号外号外--Python小屋刷题神器上线啦
《中学生可以这样学Python》84节微课免费观看地址

相关阅读
Python使用爬虫技术获取本机所在公网IP地址
Python在应用层实现UDP协议的可靠传输
Python使用UDP协议实现局域网内屏幕广播
Python+socket完美实现TCP长连接保持存活
完美解决Python套接字编程时TCP断包与粘包问题
Python实现多进程/多线程同时下载单个文件
Python 3.8实现支持断点续传的网络文件下载功能
Python+winreg+netifaces查看网络接口信息
Python自动接收微信群消息并推送相应的公众号文章
Python+psutil获取本机所有联网的应用程序信息
Python多线程编程的一个掉进去不太容易爬出来的坑
Python+socket+多线程实现同时应答多客户端的自助聊天机器人
Python实现机房管理软件的文件分发功能
技术要点|Python监控学生端电脑屏幕自动识别学习状态
Python多线程与Socket编程综合案例:素数
Python批量下载电子邮件附件并汇总合并Excel文件
Python监视电子邮箱并提示收到新邮件
Python版课堂管理系统中使用UDP广播远程关闭客户端程序思路与源码
使用Python实现电子邮件群发功能
基于Python的电子教室软件中远程关机功能的原理与实现
Python获取本机所有IP地址
Python实现局域网内屏幕广播的技术要点分析
使用Python开发SQLite代理服务器
Python获取局域网内所有机器IP地址与网卡MAC地址
Python获取本机所有网卡的MAC地址
Python+flask+flask-email发送带附件的电子邮件
Python使用UDP协议打造在线时间服务器
使用Python开发会聊天的智能小机器人
Python使用TCP协议编写会聊天的小机器人
Python实现本机网络流量监视器
Python使用UDP广播实现服务器自动发现
Python网页注入挂马
Python监视域名对应IP地址变化情况

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/62348
 
271 次点击