`
joy2everyone
  • 浏览: 136314 次
  • 性别: Icon_minigender_1
  • 来自: ...
社区版块
存档分类
最新评论

python学习笔记 - asynchronous@tornado 学习记录一

阅读更多
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-3.6.8-amd64.exe

    Python是一种高级编程语言,以其...总之,“python-3.6.8-amd64.exe”是一个为64位Windows系统准备的Python 3.6.8安装程序,适用于各种级别的Python用户,无论是入门学习还是专业开发,都能提供稳定且高效的编程环境。

    jee6 学习笔记 6.3 - @Asynchronous

    在Java企业版(Java EE)6中,`@Asynchronous`注解是一个非常重要的特性,它使得开发者可以方便地在应用程序中实现异步处理。这个注解是Java EE并发编程的一部分,主要应用于EJB(Enterprise JavaBeans)环境,用于...

    python-3.7.3-amd64.rar

    Python是世界上最受欢迎的编程语言之一,尤其在数据分析、人工智能、Web开发等领域有着广泛的应用。这里的"python-3.7.3-amd64.rar"是一个针对AMD64架构的Python 3.7.3安装包,它包含了运行Python 3.7.3所需的所有...

    跨平台 Python 异步聊天机器人框架 - Asynchronous multi-platf-nonebot2.zip

    跨平台 Python 异步聊天机器人框架 - Asynchronous multi-platf-nonebot2

    Python库 | prerender-python-starlette-1.0.0.tar.gz

    Starlette是Python中的一个轻量级的ASGI(Asynchronous Server Gateway Interface)框架,它允许开发者创建高性能的异步Web应用。ASGI是Python社区为处理现代Web应用的高并发需求而设计的标准接口。Starlette以其...

    python-3.7.0-docs-html

    Python 3.7.0 文档 HTML 版本是一个非常重要的资源,对于学习和开发 Python 3.7 应用程序来说是不可或缺的。这个压缩包包含了一系列 HTML 文件,这些文件构成了官方文档的完整集合,提供了对 Python 3.7 语言特性和...

    python-3.7.3-amd64.zip|python-3.7.3-amd64.zip

    Python 3.7.3是Python编程语言的一个重要版本,主要针对64位操作系统设计。这个版本在2019年发布,包含了诸多性能优化和新特性,旨在提供更高效、更稳定的编程环境。AMD64指的是适用于AMD和Intel公司的64位处理器...

    基于python3.6 + tornado 实现简单的 RESTful API,用于机器学习模型部署和调用.zip

    在本项目中,我们主要探讨如何使用Python 3.6版本和Tornado框架来构建一个简单的RESTful API,以便于部署和调用机器学习模型。RESTful API是一种遵循Representational State Transfer (REST)架构风格的Web服务设计...

    JavaScript高级程序设计2,学习笔记---第一篇

    这篇学习笔记将带你探索JavaScript的核心概念,包括变量、数据类型、控制流、函数、对象和类等,这些都是构建复杂应用程序的基础。 首先,我们要了解JavaScript的基础语法。在JavaScript中,变量是存储数据的容器,...

    Python-提供一个web界面检测主机是否在线

    在IT行业中,Python是一种广泛应用的编程语言,尤其在Web开发和自动化任务方面。"Python-提供一个web界面检测主机是否在线"的项目旨在利用Python构建一个网页应用,用户可以通过这个界面来检查目标主机的在线状态。...

    python-3.7-docs-html

    3. **异步生成器(Asynchronous Generators)**:Python 3.7 引入了异步生成器,允许在 `asyncio` 库中使用 `yield from` 语法,这使得异步代码的编写更加灵活和高效。 4. **更安全的随机数生成**:`random` 模块在...

    Python库 | tencentcloud-sdk-python-taf-3.0.562.tar.gz

    本文将详细介绍关于`tencentcloud-sdk-python-taf-3.0.562`的使用和相关知识点,它是一个针对腾讯云服务的Python SDK,允许开发者在Python环境中便捷地调用腾讯云的各种API接口。这个库的版本号为3.0.562,意味着它...

    Python---源码剖析.rar

    CPython是Python的官方实现,其源码提供了一个很好的学习平台。 2. **字节码(Bytecode)**:Python源码被编译成中间的字节码,这是一种低级但平台无关的表示形式。了解字节码有助于理解Python如何进行动态类型检查...

    xapp523-lvds-4x-asynchronous-oversampling

    本应用笔记中描述的电路提供了一种“部分解决方案”,即虽然没有实际恢复出时钟,但可以完全提取到达的数据。图1展示了一个典型的使用场景。 #### 7系列FPGA中的LVDS 4倍异步过采样 在Xilinx 7系列FPGA中,...

    python1903笔记 06-web前端.zip

    通过学习以上知识点,并结合Python1903笔记06-web前端的压缩包内容,你可以建立起对Web前端开发的全面理解,为进一步深入Python Web开发打下坚实基础。记得实践是检验真理的唯一标准,理论学习的同时,动手编写代码...

    A-Designer-s-Guide-to-Asynchronous-VLSI_vlsi_asynchronous_

    《异步VLSI设计指南》是一本深入探讨复杂集成电路设计领域的专著,主要关注的是异步电路的设计方法。VLSI(Very Large Scale Integration)指的是超大规模集成电路,是现代电子设备中的核心技术,它允许在单个芯片上...

    FIFO_-asynchronous-master.zip

    异步FIFO(First-In-First-Out)是一种在不同时钟域之间传递数据的重要数字逻辑设计,用于解决速率不匹配问题。在高速通信、数据处理和存储系统中,当两个独立的时钟域需要交换数据时,由于时钟频率的不同可能导致...

    Dq0-asynchronous-motor-simulation.zip_decoupling motor_stator_定转

    这个"Dq0-asynchronous-motor-simulation.zip"压缩包文件包含了一个关于异步电机解耦电机模型的仿真模型,重点在于研究定转子解耦的同步旋转模型。 首先,我们要理解“解耦”是什么意思。在电机控制中,解耦是指将...

    combine-asynchronous-programming-swift-2nd

    对于想要深入理解和掌握Swift异步编程的开发者,《Combine Asynchronous Programming in Swift 2nd》是一本不可多得的参考资料。配合书中的"comb-materials-editions-2.0.zip"资源,读者可以获取更多练习材料和补充...

    The-asynchronous-call.rar_The Call

    在IT领域,异步编程是一种重要的技术,它允许程序在执行某个耗时操作时不会阻塞主线程,从而提高应用程序的响应性和效率。标题“The-asynchronous-call.rar_The Call”提示我们,这个压缩包可能包含与异步调用相关的...

Global site tag (gtag.js) - Google Analytics