6_templates_and_ui
模板和用户界面Tornado 可以与任何其他 Python 模板语言一起使用,尽管没有将这些系统集成到 RequestHandler.render 中的规定。只需将模板渲染为字符串并将其传递给 RequestHandler.write 即可。 配置模板Tornado 在与引用模板文件的 .py 文件相同的目录中查找模板文件。要将模板文件放在不同的目录中,请使用 template_path Application setting(或覆盖 RequestHandler.get_templdate_path)。 要从非文件系统位置加载模板,请子类化 tornado.template.BaseLoader 并传递一个实例作为 template_loaderapplication 设置。 编译好的模板默认会被缓存;要关闭此缓存并重新加载模板,以便对基础文件的更改始终可见,请使用应用程序设置 compiled_template_cache=False 或 debug=True 模板语法Tornado 模板只是 HTML,其中嵌入了标记中的 Python 控制序列和表达式: 12345...
5_structure_of_tornado_app
龙卷风 Web 应用程序的结构龙卷风 Web 应用程序通常由一个或多个 RequestHandler 子类、一个将传入请求路由到处理程序的 Application 对象以及一个用于启动服务器的 main() 函数组成。 这是 Tornado Web 应用程序的示例 1234567891011121314151617import tornado.ioloopimport tornado.webclass MainHandler(tornado.web.RequestHandler): def get(self): self.write('Hello world')def make_app(): return tornado.web.Application([ (r"/", MainHandler) ])if __name__ == "__main__": app = make_app() app.listen(8080) tornado.ioloop.IO...
4_queue_concurrent_web_spider
Queue example => 并发网络蜘蛛Tornado 的 tornado.queues 模块为协程实现了异步生产者/消费者模式,类似于 Python 标准库的队列模块为线程实现的模式。 产生 Queue.get 的协程会暂停,直到队列中有一个项目。如果队列有最大大小 se,则产生 Queue.put 的协程将暂停,直到有空间容纳另一个项目。 队列维护未完成任务的计数,从零开始。 put 增加计数; task_done 会减少它。 在此处的网络蜘蛛示例中,队列开始时仅包含 base_url。当工作人员获取页面时,它会解析链接并将新链接放入队列中,然后调用 task_done 来递减计数器 1。最终,worker 获取了一个其 URL 之前都已经见过的页面,并且队列中也没有剩余的工作。因此,该工作人员对 task_done 的调用会将计数器递减至零。正在等待加入的主协程未暂停并完成。 点击这里阅读web_spider.py
3_corountines
协奏曲协程是在 Tornado 中编写异步代码的推荐方法。协程使用 yield 或 await 关键字来挂起和恢复执行,而不是回调链(gevent 等框架中的协作轻量级线程有时也称为协程,但在 Tornado 中,所有协程都使用显式上下文切换并称为异步函数)。 协程没有线程的开销,它们还通过减少可能发生上下文切换的位置数量,使并发性更容易推理。 1234async def fetch_coroutine(url): client = AsyncHTTPClient() resp = await client.fetch(url) return resp.body 本机 <-> 装饰 coroutinesPython 3.5(或更高版本)使用 yield 或 await 来构建本机协程。使用旧版本的 Python,您可以使用装饰协程或基于收益的协程。在龙卷风中, tornado.gen.coroutine 提供它, 您可以通过以下两种方法使用协程: 1234@gen.coroutinedef fun(): data = yield fun...
2_asynchronous_and_no-blocking_IO
ASYNCHRONOUS AND NO-BLOCKING IOReal-Time web features require a long-lived mostly-idle connection per user. In a traditional synchronous web server, this implies devoting one thread to each other, which can be expensive. To minimize the cost of concurrent connections, Tornado uses a single-threaded event-loop. Thus, all application code shoule aim to be asynchronous and non-blocking because only one operation can be active as a time. BlockingA function blocks when it waits for something happe...
1_introduction
简介Tornado 是一个 Python Web 框架和异步网络库。通过使用非阻塞网络 I/O,Tornado 可以扩展到数万个开放连接,这使其成为长轮询、Websockets 和其他需要相互长期连接的应用程序的理想选择。 ##主要组成部分 网络框架包括 RequestHandler,它被子类化以创建 Web 应用程序。 HTTP 的客户端和服务器端实现HTTPServer 和 AsyncHTTPClient 异步网络库包括 IOLoop 和 IOStream 类,它们充当 HTTP 组件的构建块,也可用于实现其他协议。 协朗库类tornado.gen 允许以比链接回调更直接的方式编写异步代码。这类似于Python3.5(或更高版本,async def)中引入的原生协程功能。 其他Tornado Web 框架和 HTTP 服务器一起提供了 WSGI 上的全栈替代方案。虽然可以使用 Tornado HTTP 服务器作为其他 WSGI 框架的容器,但每种组合都有局限性,要充分利用 Tornado,您需要同时使用 Tornado 的 Web 框架和 HTTP 服务...
进程管理
进程管理进程和线程 进程概念 进程是指一个具有一定独立功能的程序在一个数据集合上的一次动态执行的过程 进程包含了一个正在运行的程序的所有状态信息:代码、数据、状态寄存器、通用寄存器和进程占用系统资源 => 进程控制块 进程是操作系统处于执行状态程序的抽象 程序 => 文件 进程 => 执行中的文件 => 程序 + 执行状态 进程的状态与转换 进程创建:系统初始化时,用户请求创建一个新的进程 或 正在运行的进程申请创建新的进程。 进程执行:内核通过调度算法选择一个就绪的进程开始执行。 进程等待:请求并等待系统服务 或 启动过某种操作,导致无法马上完成进程的等待;比如需要的数据没有到达的等待。 进程抢占:高优先级的进程就绪 或 当前执行的进程执行时间用完,被其他进程抢占。 进程唤醒:被阻塞的进程需要的资源被满足;被阻塞的进程等待的事件到达(进程只能被其他进程或者操作唤醒,不能自身唤醒) 进程结束:将进程占用的资源释放给操作系统(包括正常退出、错误退出、致命错误和被其它进程所杀等) 进程的控制与组织 进程控制块...
输入输出(IO)管理
输入输出IO管理三种常见的设备接口类型 字符设备(键盘鼠标、串口等) 块设备(磁盘、磁带、光驱等) 网络设备(以太网、无线等) IO管理概述IO控制方式 阻塞IOWait:读数据时,进程进入等待状态,直到数据读取完成;写数据时,进程进入等待状态,直到设备完成数据写入 非阻塞IODon't Wait:立即从读写系统调用返回,返回值成功传输字节数 异步IOTell me later:读数据时,使用指针标记好数据缓存区,立即返回,稍后内核将填充缓冲区并通知用户;写数据时,使用指针标记好用户缓冲区,立即返回,稍后内核将处理数据并返回给用户。 IO软件层次结构设备 -> 设备控制器 -> 设备驱动 -> IO子系统 -> 内核 IO核心子系统IO调度概念高速缓存与缓冲区 缓存:数据传输双方访问速度差距较大,引入的速度匹配中间层。磁盘缓存是磁盘扇区在内存中的缓冲区
设计模式学习笔记
创建型作用:如何创建对象 1 单例模式单例模式(Singleton)创建分为饿汉式和懒汉式,但是在开源项目中使用最多的主要有两种写法。 1.1 静态常量静态常量方式属于饿汉式,以静态变量的方式声明对象。这种单例模式在 Spring 中使用的比较多,举个例子,在 Spring 中对于 Bean 的名称生成有个类 AnnotationBeanNameGenerator 就是单例的。 1.2 双重检查机制双重检查机制(DCL)方式属于懒汉式。 123456789101112131415161718public class Singleton { private volatile static Singleton INSTANCE; private Singleton() {} public static Singleton getInstance() { if (INSTANCE == null) { synchronized (Singleton.class) {...
计算机网络概述
计算机网络概述网络的发展 计算机网络 = 计算机 + 通信 + 用户需求 计算机发展过程: 单机:单个用户独占系统资源(主机) 分时系统:分时多用户系统:多个用户利用多台终端共享单台计算机的资源 远程访问系统:利用通信线路将远程终端连接到主机,不受地域限制地使用计算机资源 网络:将多台计算机连接在一起,相互共享资源 计算机网络 以 共享资源 (硬件、软件和数据资源等)为目的而连接起来的、 在协议控制下,由一台或多台计算机、若干台终端设备、数据传输设备等组成的系统的集合。这些计算机系统应当具有能 独立自治能力 的操作系统。 计算机联网的主要目的: 资源共享: 硬件共享:大型计算机的处理能力,昂贵的外设 软件共享:应用软件、系统软件等 数据共享:用户数据等 数据传输: 支持用户之间的数据传输(如 smtp、ftp、ip 等),计算机网络可以使得分布于全球的计算机协作起来,形成一个巨大、虚拟的计算机。 网络的类型: 根据网络覆盖范围 Wide Area Network (WAN) 广域网 Local Area Network (LAN) 局域网...