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

推荐图书:

《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年度清华大学出版社畅销图书<

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值