IOLoop主要工作 1.将TCPServer 注册到 IOLoop 的事件记到 _handlers 字段,同时注册 READ 和 ERROR 事件到 epoll 2.IOLoop 启动一个大循环,负责轮询epoll中是否已经有就绪的事件,如果有就执行对应的回调   以下为源码分析,省略部分源码,只取主要部分 class Configurable(object): """根据子类的配置,来创建一个对象,也就是说,继承自Configurable的子类,可以自己配置产生不同的类,…
Application 对象主要工作: 服务器启动时: 1.在新建一个app的时候,根据设置好的 URL 和回调函数 Handler 封装成URLSpec 对象   服务器运行时: 2.在请求到来,将 HTTPServer 封装好的HTTPRequest 传入_RequestDispatcher对象,_RequestDispatcher对象根据传入的 HTTPRequest 使用URLSpec解析匹 match 正则匹配找到对应的 RequestHandler ,执行它的 _execute 方法…
主要工作: 服务器启动的时候做的事: 1.把包含了各种配置信息的 application 对象封装到了 HttpServer 对象的 request_callback 字段中,等待被调用 2.TCPServer 通过 listen 方法启动端口监听, 封装_handle_connection回调函数,并注册到 IOLoop 中   服务器运行时做的事: 3.当有请求到来时,注册在 IOLoop 中的 _handle_connection 将会被调用, _handle_connection 方法将…
Tornado 服务器启动流程 因为Tornado 里使用了很多传类的方式,也就是delegate,之所以要这么做,其实和 iOS 开发那样,也很多的 delegate, 如此来实现高度解耦,但是比较绕,所以建议: 1.先浏览一遍启动流程,再看源码 2.在看一遍请求到来时的处理流程,再看源码 备注: 流程图是xmind 编辑的,好像这里无法上传源文件,所以只能把图片下载下来看了,会没那么清晰…
前言: 启动一个tornado 服务器基本代码 class HomeHandler(tornado.web.RequestHandler): #创建 RequesHandler 对象,处理接收到的 http 请求 def get(self): entries = self.db.query("SELECT * FROM entries ORDER BY published DESC LIMIT 5") if not entries: self.redirect("/compo…
方式一:通过线程池或者进程池 导入库futures是python3自带的库,如果是python2,需要pip安装future这个库 备注:进程池和线程池写法相同 from concurrent.futures import ThreadPoolExecutor, ProcessPoolExecutor from tornado.concurrent import run_on_executor def doing(s): print('xiumian--{}'.format(s)) time.s…
1.AndroidStudio源码调试方式 AndroidStudio默认是支持一部分源码调试的,但是build.gradle(app) 中的sdk版本要保持一致, 最好是编译版本.运行版本以及手机的版本都保持一致,比如 android { compileSdkVersion 30 //1 buildToolsVersion "30.0.0" defaultConfig { applicationId "komine.demos.app" minSdkVersion…
1.简介 在上一篇文章中,我分析了 Spring 是如何为目标 bean 筛选合适的通知器的.现在通知器选好了,接下来就要通过代理的方式将通知器(Advisor)所持有的通知(Advice)织入到 bean 的某些方法前后.与筛选合适的通知器相比,创建代理对象的过程则要简单不少,本文所分析的源码不过100行,相对比较简单.在接下里的章节中,我将会首先向大家介绍一些背景知识,然后再去分析源码.那下面,我们先来了解一下背景知识. 2.背景知识 2.1 proxy-target-class 在 Spr…
Flask框架 (四)—— 请求上下文源码分析.g对象.第三方插件(flask_session.flask_script.wtforms).信号 目录 请求上下文源码分析.g对象.第三方插件(flask_session.flask_script.wtforms).信号 一.请求上下文源码分析 二.g对象 1.什么是g对象 2.g对象和session的区别 三.flask-session 1.作用 2.安装 3.使用 四.flask-script 1.什么是flask_script 2.安装 3.…
原创申明:本文由公众号[猿灯塔]原创,转载请说明出处标注 “365篇原创计划”第十一篇. 今天呢!灯塔君跟大家讲: JVM源码分析之Java对象头实现 HotSpot虚拟机中,对象在内存中的布局分为三块区域:对象头.实例数据和对齐填充. 对象头 对象头包括两部分:Mark Word 和 类型指针. Mark Word Mark Word用于存储对象自身的运行时数据,如哈希码(HashCode).GC分代年龄.锁状态标志.线程持有的锁.偏向线程ID.偏向时间戳等等,占用内存大小与虚拟机位长一致.…