前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python实现TCP协议套接字多路复用

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

作者头像
Python小屋屋主
发布2020-05-08 16:35:41
9880
发布2020-05-08 16:35:41
举报
文章被收录于专栏:Python小屋Python小屋

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

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

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

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

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

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

模拟场景:

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

服务端代码:

客户端代码:

运行情况:

多线程版本客户端代码:

运行情况:

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-04-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python小屋 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档