HTTPClient是httpclient.py中看到的第一个类。内容非常简单,但是却又没有看上去那么简单:
- fetch方法的实现会根据构造HTTPClient时传入的参数(async_client_class)发生变化。也就是说,HTTPClient并不是一个interface,而是一个delegator
- 每一个HTTPClient实例都会自己创建以及维护一个IOLoop。使用ioloop的目的,是为了实现异步的httprequest。这个ioloop会随着每一次fetch调用而start,request结束而stop,httpclient实例被销毁而close。
- 每一个HTTPClient会且只会对应一个async_client_class的实例。
在默认不传入任何参数的情况下,HTTPClient会选择AsyncHTTPClient作为默认的fetch engine。在tornado的注释里提到,HTTPClient只是为了方便使用,绝大多数情况下,application应该直接使用AsyncHTTPClient(可别搞混了,两者名字很像但根本不是继承关系)
AsyncHTTPClient理论上讲是一个abstract class,因为最重要的fetch方法,它并没有实现,而是依赖于子类(例如SimpleAsyncHTTPClient)的实现。AsyncHTTPClient重载了__new__方法,导致AsyncHTTPClient的对象创建过程显现出一种难以言语的诡异行为:
- 如果采用默认参数构造AsyncHTTPClient,得到的是一个SimpleAsyncHTTPClient对象的实例
- 如果在构造AsyncHTTPClient之前调用过AsyncHTTPClient.configure方法,可能会得到完全不同的另一个对象,例如AsyncHTTPClient.configure(async_client_class=CurlAsyncHTTPClient)
- 如果构造AsyncHTTPClient时全部使用默认参数,则每次得到的都是同一个对象的实例(如果此对象还没有在其他地方被析构删除)
- 如果构造AsyncHTTPClient时使用如下参数列表:force_instance=True,则每次得到的都是不同对象的实例。
- 如果构造AsyncHTTPClient时时每次传入不同的ioloop的实例,例如AsyncHTTPClient(IOLoop()),则不论是否设置force_instance=True,每次得到的也都是不同的实例。。。
根据上面的行为,得到两条结论:
- 一个AsyncHTTPClient(及其子孙类)的实例,对应且只能对应一个IOLoop;
- AsyncHTTPClient是一个可以实例化的有工厂的行为的“抽象类”(可以通过调用configure方法定义工厂的行为);
在tornado的注释中提到,对于SimpleAsyncHTTPClient,”It is intended to become the default AsyncHTTPClient implementation in a future release“。这个类非常简单木有啥好说的,只有三点有必要提一下:
- 这是一个实现了fetch方法的哥们
- 它继承自AsyncHTTPClient
- 它接受一个参数max_clients。别被它的名字弄糊涂了,这不是the maximum of clients,而是当前client实例的the maximum number of parall asynchronize fetch call!
稍微总结一下:
- HTTPClient是一个为了使用方便而定义的帮助类,提供的默认的callback方法会自动在每次fetch结束后清理资源。
- AsyncHTTPClient是一个”抽象类“
- SimpleAsyncHTTPClient和CurlAsyncHTTPClient是AsyncHTTPClient的子类,在直接使用这两个类的时候需要显示的制定Http请求的callback方法。
相关推荐
【Tornado 框架简介】 Tornado 是一个开源的 Python Web 服务器和网络库,最初由 FriendFeed 团队开发,后来被 Facebook 收购并贡献给了社区。Tornado 以其非阻塞 I/O 和异步处理能力而闻名,这使得它在处理大量...
《Tornado Device Driver Workshop》是针对VxWorks操作系统下设备驱动开发的一份详细教程,旨在帮助开发者深入理解和实践VxWorks设备驱动的编写与调试。这份资料由一系列工作坊活动组成,通过理论与实践相结合的方式...
:tornado: 天气影响 :multiply: :check_mark: :tractor: 动画手机 :multiply: :check_mark: :dashing_away: 风 :check_mark: :check_mark: :trophy: 排名搜寻 :check_mark: :check_mark: :laptop: ...
Tornado是VxWorks的集成开发环境(IDE),提供了完整的开发、调试和维护工具,使得开发者能够高效地构建和管理VxWorks应用程序。 VxWorks的核心特性包括: 1. **实时性**:VxWorks以其微秒级的调度响应时间著称,...
在Windows 7或Windows 10操作系统环境下,Tornado是一个常用的Python异步网络库,用于构建高并发、高性能的Web服务。Tornado 2.2是该库的一个版本,可能存在某些功能上的限制或者与新系统兼容性的问题,因此有时需要...
**PyPI 官网下载 | simple_tornado-0.2.1-py3-none-any.whl** 在Python的开发环境中,PyPI(Python Package Index)是最重要的资源库,它提供了大量的第三方Python模块和库,方便开发者下载和安装。本资源"simple_...
没有干扰。 没有评论区。 没有样式表。 没有 JavaScript。 ... 常见问题 你为什么做这个? 我想要一种快速的方式来查看 Reddit,保持最新状态并阅读有趣的内容而不会分心。... 如果我故意想进入 Reddit 的兔子洞,我会...
该资源内项目源码是个人的课程设计、毕业设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过严格测试运行成功才上传的,请放心下载使用...
【Tornado 2 工具集介绍】 Tornado 2 是Wind River公司为VxWorks实时操作系统提供的一套集成开发环境(IDE),主要用于简化VxWorks应用和驱动程序的开发、调试以及系统集成。这个工具集是VxWorks开发者的重要利器,...
### Tornado 2.2 用户指南(Windows版)关键知识点概览 #### 一、概述 (Overview) **1.1 引言 (Introduction)** - **Tornado 的定位**: Tornado 是 Wind River Systems, Inc. 开发的一款集成开发环境(IDE),主要...
WIND MEDIA LIBRARY 3.0.3 (CP3) for Tornado 2.2.0 and Tornado 2.2.1 Up-to-date product bulletins, information on known problems and fixes/changes made in this release, and essential reference ...
中文版_Tornado__文档_WIP__tornado-zh
Python 22赠送课程TORNADO基础 6-1_8-模板01.mp4
Python 22赠送课程TORNADO基础 4-4_4-错误页面.mp4
Python 22赠送课程TORNADO基础 4-1_1-课程回顾.mp4
Python 22赠送课程TORNADO基础 6-2_9-模板02.mp4
Python 22赠送课程TORNADO基础 1-1_1-创建项目.mp4
用于使用简单和简约的API创建企业级(Web)应用程序的TypeScript框架,使您可以专注于业务逻辑。 根据声明和必要的程序,由inspiried /。 查看以获取更多详细信息。 Odi提供了用于创建易于支持和可扩展的Web应用...
python 22、赠送课程TORNADO基础 4-2_2-作业讲解.mp4
python 22、赠送课程TORNADO基础 1-2_2-基本功能.mp4