zoukankan      html  css  js  c++  java
  • Tornado异步之-协程与回调

    回调处理异步请求

    • 回调 callback 处理异步官方例子
    # 导入所需库
    from tornado.httpclient import AsyncHTTPClient
    
    def asynchronous_fetch(url, callback):
        http_client = AsyncHTTPClient()
        def handle_response(response):
            callback(response.body)
        http_client.fetch(url, callback=handle_response)
    
    • http_client处理请求时http_client.fetch(url, callback=handle_response),参数url是请求的url, 关键字参数callback传入方法handle_response 此方法即为回调方法, 就是说当http_client请求完成后才会调用callback=handle_response中的 handle_response函数.
    • 请求网络是耗时操作,传入关键字参数callback来'表明'这是异步请求, 以此来确定这是异步处理请求

    协程处理异步

    from tornado import gen
    
    @gen.coroutine
    def fetch_coroutine(url):
        http_client = AsyncHTTPClient()
        response = yield http_client.fetch(url)
        raise gen.Return(response.body)
    
    • @gen.coroutine此装饰器代表的是协程, 与关键字yield搭配使用
    • http_client.fetch(url)请求网络是耗时操作, 通过关键字yield来挂起调用, 而当http_client.fetch(url)请求完成时再继续从函数挂起的位置继续往下执行.
    • raise gen.Return(response.body)在python3.3以后作用相当于return, 在python3.3之前作用是返回一个异常值, 跟 返回一个value, 以及python3.3之前generators 不可以return value, 所以tornado定义了一个特殊的返回值raise gen.Return.
    • 在python3.3以后直接用return
  • 相关阅读:
    EPPlus实战篇——Excel写入
    EPPlus实战篇——Excel读取
    Elasticsearch,Kibana,Logstash,NLog实现ASP.NET Core 分布式日志系统
    ElasticSearch+NLog+Elmah实现Asp.Net分布式日志管理
    C盘清理
    vs2017离线安装且安装包不占用C盘空间
    CommandLine exe参数
    Nuget 打包 for .Net Standart project
    Redis 应用:缓存
    Redis架构设计
  • 原文地址:https://www.cnblogs.com/adampei-bobo/p/8324570.html
Copyright © 2011-2022 走看看