Tornado是一款非阻塞web server,今天做了一个很简单的尝试
non-blocking I/O, 我简单的理解是“允许某一个操作可以继续进行,而不必等待某一资源的响应,预提供一个回调函数,用于处理、响应该资源的结果(当该资源返回相关内容的时候)”
对比异步I/O,我们最常见的就是同步I/O(线性编程),一次请求访问另一个资源,必须等待该资源的成功返回,方可进行下一步操作,如果该资源无响应(或异常),程序就终止(受限)于此。
更多异步I/O,可以参考:
http://en.wikipedia.org/wiki/Asynchronous_IO
这里我个人很浅显地描述下sync/async的大致对比:
下面就是我的测试代码:
async_sync_test_invoke3.py,一个普通的web app,将会被用于异步请求的调用
import logging
import tornado.httpserver
import tornado.ioloop
import tornado.web
class MainHandler(tornado.web.RequestHandler):
def get(self):
'''
The below is only a testing which will be exected to kill time,
and then we can find the asynchronous effect from the front page.
'''
for i in range(1, 100000):
print "kill time"
self.write("hello")
settings = {
#"debug": True,
}
application = tornado.web.Application([
(r"/async-sync-test/", MainHandler),
], **settings)
if __name__ == "__main__":
http_server = tornado.httpserver.HTTPServer(application)
http_server.listen(8084)
tornado.ioloop.IOLoop.instance().start()
async_test3.py, 将会提供一次异步请求调用async_sync_test_invoke3.py提供的/async-sync-test/
import logging
import tornado.httpserver
import tornado.ioloop
import tornado.web
from tornado.httpclient import AsyncHTTPClient
class MainHandler(tornado.web.RequestHandler):
@tornado.web.asynchronous
def get(self):
http = tornado.httpclient.AsyncHTTPClient()
http.fetch("http://localhost:8084/async-sync-test/", callback=self._test_callback)
self.write("Hello to the Tornado world! ")
'''
Flushes the current output buffer to the network.
'''
self.flush()
'''
_test_callback is a callback function used for the processing of the response from the async request
'''
def _test_callback(self, response):
self.write(response.body)
'''
refer the offical document, we are responsible for the invocation of the finish function in the async case.
'''
self.finish()
settings = {
#"debug": True,
}
application = tornado.web.Application([
(r"/", MainHandler),
], **settings)
if __name__ == "__main__":
http_server = tornado.httpserver.HTTPServer(application)
http_server.listen(8083)
tornado.ioloop.IOLoop.instance().start()
分别启动async_sync_test_invoke3.py , async_test3.py
我们访问http://localhost:8083/的时候,可以在页面上看到较为明显的异步效果,“hello”的内容是在稍后的response中获得的。
小结:
如果是sync I/O,我们只启动一个类似sync_test代码(此处并没有提供),同样访问http://localhost:8083/程序将会整个被http error提醒,因为这里无法成功连接预期http resource,程序的线性表现在此看见。
如果是async I/O,我们只启动async_test3.py,从页面角度的看至少能获得“Hello to the Tornado world!”内容,丢失的是异步部分的内容,当然后台会有错误输出。
通过合理使用sync/async I/O,可以给web应用不错的性能,以及带来不错的用户体验
请大家帮忙指正及建议,如果有理解错误的地方!
- 大小: 55.2 KB
分享到:
相关推荐
Python是一种高级编程语言,以其...总之,“python-3.6.8-amd64.exe”是一个为64位Windows系统准备的Python 3.6.8安装程序,适用于各种级别的Python用户,无论是入门学习还是专业开发,都能提供稳定且高效的编程环境。
在Java企业版(Java EE)6中,`@Asynchronous`注解是一个非常重要的特性,它使得开发者可以方便地在应用程序中实现异步处理。这个注解是Java EE并发编程的一部分,主要应用于EJB(Enterprise JavaBeans)环境,用于...
Python是世界上最受欢迎的编程语言之一,尤其在数据分析、人工智能、Web开发等领域有着广泛的应用。这里的"python-3.7.3-amd64.rar"是一个针对AMD64架构的Python 3.7.3安装包,它包含了运行Python 3.7.3所需的所有...
跨平台 Python 异步聊天机器人框架 - Asynchronous multi-platf-nonebot2
Starlette是Python中的一个轻量级的ASGI(Asynchronous Server Gateway Interface)框架,它允许开发者创建高性能的异步Web应用。ASGI是Python社区为处理现代Web应用的高并发需求而设计的标准接口。Starlette以其...
Python 3.7.0 文档 HTML 版本是一个非常重要的资源,对于学习和开发 Python 3.7 应用程序来说是不可或缺的。这个压缩包包含了一系列 HTML 文件,这些文件构成了官方文档的完整集合,提供了对 Python 3.7 语言特性和...
Python 3.7.3是Python编程语言的一个重要版本,主要针对64位操作系统设计。这个版本在2019年发布,包含了诸多性能优化和新特性,旨在提供更高效、更稳定的编程环境。AMD64指的是适用于AMD和Intel公司的64位处理器...
在本项目中,我们主要探讨如何使用Python 3.6版本和Tornado框架来构建一个简单的RESTful API,以便于部署和调用机器学习模型。RESTful API是一种遵循Representational State Transfer (REST)架构风格的Web服务设计...
这篇学习笔记将带你探索JavaScript的核心概念,包括变量、数据类型、控制流、函数、对象和类等,这些都是构建复杂应用程序的基础。 首先,我们要了解JavaScript的基础语法。在JavaScript中,变量是存储数据的容器,...
在IT行业中,Python是一种广泛应用的编程语言,尤其在Web开发和自动化任务方面。"Python-提供一个web界面检测主机是否在线"的项目旨在利用Python构建一个网页应用,用户可以通过这个界面来检查目标主机的在线状态。...
3. **异步生成器(Asynchronous Generators)**:Python 3.7 引入了异步生成器,允许在 `asyncio` 库中使用 `yield from` 语法,这使得异步代码的编写更加灵活和高效。 4. **更安全的随机数生成**:`random` 模块在...
本文将详细介绍关于`tencentcloud-sdk-python-taf-3.0.562`的使用和相关知识点,它是一个针对腾讯云服务的Python SDK,允许开发者在Python环境中便捷地调用腾讯云的各种API接口。这个库的版本号为3.0.562,意味着它...
CPython是Python的官方实现,其源码提供了一个很好的学习平台。 2. **字节码(Bytecode)**:Python源码被编译成中间的字节码,这是一种低级但平台无关的表示形式。了解字节码有助于理解Python如何进行动态类型检查...
本应用笔记中描述的电路提供了一种“部分解决方案”,即虽然没有实际恢复出时钟,但可以完全提取到达的数据。图1展示了一个典型的使用场景。 #### 7系列FPGA中的LVDS 4倍异步过采样 在Xilinx 7系列FPGA中,...
通过学习以上知识点,并结合Python1903笔记06-web前端的压缩包内容,你可以建立起对Web前端开发的全面理解,为进一步深入Python Web开发打下坚实基础。记得实践是检验真理的唯一标准,理论学习的同时,动手编写代码...
《异步VLSI设计指南》是一本深入探讨复杂集成电路设计领域的专著,主要关注的是异步电路的设计方法。VLSI(Very Large Scale Integration)指的是超大规模集成电路,是现代电子设备中的核心技术,它允许在单个芯片上...
异步FIFO(First-In-First-Out)是一种在不同时钟域之间传递数据的重要数字逻辑设计,用于解决速率不匹配问题。在高速通信、数据处理和存储系统中,当两个独立的时钟域需要交换数据时,由于时钟频率的不同可能导致...
这个"Dq0-asynchronous-motor-simulation.zip"压缩包文件包含了一个关于异步电机解耦电机模型的仿真模型,重点在于研究定转子解耦的同步旋转模型。 首先,我们要理解“解耦”是什么意思。在电机控制中,解耦是指将...
对于想要深入理解和掌握Swift异步编程的开发者,《Combine Asynchronous Programming in Swift 2nd》是一本不可多得的参考资料。配合书中的"comb-materials-editions-2.0.zip"资源,读者可以获取更多练习材料和补充...
在IT领域,异步编程是一种重要的技术,它允许程序在执行某个耗时操作时不会阻塞主线程,从而提高应用程序的响应性和效率。标题“The-asynchronous-call.rar_The Call”提示我们,这个压缩包可能包含与异步调用相关的...