Python3中tornado高并发框架

1.单线程
tornado.web:基础web框架模块
tornado.ioloop:核心IO循环模块,高效的基础。封装了:
1.asyncio 协程,异步处理
2. epoll模型:水平触发(状态改变就询问,select(),poll()), 边缘触发(一直询问,epoll())
3.poll 模型:I/O多路复用技术
4.BSD(UNIX操作系统中的一个分支的总称)的kqueue(kueue是在UNIX上比较高效的IO复用技术)

epoll和kqueue的区别如下:

‘epoll‘仅适用于文件描述符,在Unix中,一切都是文件”。
这大多是正确的,但并非总是如此。例如,计时器不是文件。
信号不是文件。信号量不是文件。进程不是文件。
(在Linux中)网络设备不是文件。类UNIX操作系统中有许多不是文件的东西
。您不能使用select()/ poll()/ epoll来复制那些“事物”。
Linux支持许多补充系统调用,signalfd(),eventfd()和timerfd_create()
它们将非文件资源转换为文件描述符,以便您可以将它们与epoll()复用。
epoll甚至不支持所有类型的文件描述符;
select()/ poll()/ epoll不适用于常规(磁盘)文件。
因为epoll 对准备模型有很强的假设; 监视套接字的准备情况,
以便套接字上的后续IO调用不会阻塞。但是,磁盘文件不适合此模型,因为它们总是准备就绪。

kqueue 中,通用的(struct kevent)系统结构支持各种非文件事件
import tornado.web #tornado.web:基础web框架模块
import tornado.ioloop #tornado.ioloop:核心IO循环模块,高效的基础。

class IndexHandler(tornado.web.RequestHandler):
#类比Django中的视图,相当于业务逻辑处理的类
def get(self): #处理get请求的,并不能处理post请求
self.write("good boy") #响应http的请求

if __name__=="__main__":

"""
实例化一个app对象
Application:他是tornado.web框架的核心应用类,是与服务器对应的一个接口
里面保存了路由映射表,还有一个listen方法,可以认为用来创建一个http的实例
并绑定了端口
"""

app = tornado.web.Application([
(r"/" ,IndexHandler),
])

app.listen(8888) #绑定监听端口,但此时的服务器并没有开启监听
tornado.ioloop.IOLoop.current().start()

#Application([(r"/" ,IndexHandler),])传入的第一个参数是
#路由路由映射列表,但是在此同时Application还能定义更多参数

#IOLoop.current():返回当前线程的IOLoop实例
#例如实例化对象 ss=run() ,ss.start()
#start():启动了IOloop实例的循环,连接客服端后,同时开启了监听

原理如下:
linux-epoll进行管理多个客服端socket
tornado-IoLoop不断进行询问epoll:小老弟,有没有我需要做的事吗?
当epoll返回说:老哥,有活了
tornado-IoLoop将活上传给tornado.web.Application
tornado.web.Application中有 路由映射表
就会将socket进行一个路由匹配
把socket匹配给相对应的Handler(处理者)
Handler(处理者)处理后将数据返回给对应的socket,
(这里因为可能会延时响应,所以这里进行异步处理)
socket然后再传给了客服端浏览器。

原文地址:https://www.cnblogs.com/liang715200/p/11788461.html

时间: 2024-10-11 05:54:15

Python3中tornado高并发框架的相关文章

纯Java——简易高并发框架

转自:https://blog.csdn.net/MonkeyDCoding/article/details/81369610 0.源代码github-简易高并发框架 注:本篇博客知识来自于网课. 1.问题来源以及w对于一个题库系统.考试组要有批量的离线文档要生成.题库组批量的题目要进行排重,且要根据条件批量修改题目内容.对于 痛点: 批量任务完成缓慢所有的问题都围绕着“查询”,即查询进度影响总体性能我们希望尽量使用友好(如果用多线程来提高性能,我们希望能屏蔽细节)因此我们需要一个可以提供查询进

浅谈java中如何处理高并发的问题

1.从最基础的地方做起,优化我们写的代码,减少必要的资源浪费     a.避免频繁的使用new对象,对于整个应用只需要存在一个实例的类,我们可以使用单例模式.对于String连接操作,使用StringBuffer或StringBuilder,对于工具类可以通过静态方法来访问.     b.避免使用错误的方式,尽量不用instanceof做条件判断.使用java中效率高的类,比如ArrayList比Vector性能好. 2.html静态化     我们通过一个链接地址访问,通过这个链接地址,服务器

服务器维护中处理高并发导致的一些常见问题解决方案

这里还是按照场景来吧,毕竟场景是最能体验实用性的.首先说下服务器配置以及环境 阿里云ECS云主机,8G内存,4核的CPU,20M带宽,20G系统盘+200G数据盘,CentOS6.564位,安装的一件集成lnmp环境 场景:微信发红包 这个场景是很常见的,一般客户会在整点的时候进行一次微信公众号的广告推送,这儿时候服务器的并发大概在3000到5000左右.说起来这其实并不算是高并发,但是服务器还是崩了,大概需要等待5分钟之后才能恢复正常.这有点不应该啊,分析原因.查看CPU的利用率并不高,内存使

谈论java中如何处理高并发的问题

1 从最基础的地方做起,优化我们写的代码,减少必要的资源浪费.         a.避免频繁的使用new对象,对于整个应用只需要存在一个实例的类,我们可以使用单例模式.对于String连接操作,使用      StringBuffer或StringBuilder,对于工具类可以通过静态方法来访问.         b.避免使用错误的方式,尽量不用instanceof做条件判断.使用java中效率高的类,比如ArrayList比Vector性能好. 2 html静态化         我们通过一个

WEB应用中的高并发问题

大型网站,比如门户网站.在面对大量用户访问.高并发请求方面,基本的解决方案集中在这样几个环节:使用高性能的服务器.高性能的数据库.高效率的编程语言.还有高性能的Web容器.但是除了这几个方面,还没法根本解决大型网站面临的高负载和高并发问题.这些解决思路在一定程度上也意味着更大的投入,并且这样的解决思路具备瓶颈,没有很好的扩展性,以下从平时的项目经验以及引用一些博客的思路来尝试解决高并发的情况. 0.首先需要关注数据库 没错,首先是数据库,这是大多数应用所面临的首个SPOF(单点故障).尤其是We

java中应对高并发的两种策略

目的:提高可用性 通过ExecutorService实现队列泄洪 //含有20个线程的线程池 private ExecutorService executorService = Executors.newFixedThreadPool(20); 将有并发压力的下游代码放入到线程池的submit方法中,如下: //同步调用线程池的submit方法 简单实现 拥塞窗口为20的队列泄洪(一个服务器同一时间只能处理20个请求,其他请求队列等待)Future<Object> future = execu

直播中的高并发问题如何解决?

对于爱好观看直播的用户来说,能够如丝般顺滑地浏览视频是一大极致享受.但实际情况是,当某时段大量用户数据涌入(如观看人数上升,弹幕消息爆发等),若并发结构没有优化好,我们很难不遇到画面卡顿的情况.所以今天拓幻科技来分享一下,在直播系统源码开发过程中,如何正确处理高并发带来的这些卡顿问题呢?一.防盗链处理如果是网页直播间,当前站点没有做防盗链的话,就很容易遭受恶意请求.而过多的恶意请求,会对本身流量就比较大的直播间造成很大负担.比如说有A.B两个直播网站,A站享用了B站的资源,页面嵌入了B站的图片.

java高并发框架 SSM框架 详细整合(Spring+SpringMVC+MyBatis)

获取[下载地址]   [免费支持更新]三大数据库 mysql  oracle  sqlsever   更专业.更强悍.适合不同用户群体[新录针对本系统的视频教程,手把手教开发一个模块,快速掌握本系统] A集成代码生成器 [正反双向(单表.主表.明细表.树形表,开发利器)+快速构建表单;freemaker模版技术 ,0个代码不用写,生成完整的一个模块,带页面.建表sql脚本,处理类,service等完整模块B 集成阿里巴巴数据库连接池druid;  数据库连接池  阿里巴巴的 druid.Drui

java高并发框架 SSM框架 详细整合教程(Spring+SpringMVC+MyBatis)

获取[下载地址]   QQ: 313596790   [免费支持更新]支持三大数据库 mysql  oracle  sqlsever   更专业.更强悍.适合不同用户群体[新录针对本系统的视频教程,手把手教开发一个模块,快速掌握本系统]A 代码生成器(开发利器);      增删改查的处理类,service层,mybatis的xml,SQL( mysql   和oracle)脚本,   jsp页面 都生成   就不用写搬砖的代码了,生成的放到项目里,可以直接运行B 阿里巴巴数据库连接池druid