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

推荐图书:

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

图书详情(京东)

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

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

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

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

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

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

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

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

模拟场景:

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

服务端代码:

 

客户端代码:

 

运行情况:

 

多线程版本客户端代码:

 

运行情况:

 

---董付国老师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月

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

dongfuguo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值