zoukankan      html  css  js  c++  java
  • Python学习---IO的异步[tornado模块]

    tornado是一个异步非阻塞的WEB框架.它的异步非阻塞实际上就是用事件循环写的。

    主要体现在2点:

    1. 作为webserver可以接收请求,同时支持异步处理请求。Django只能处理完成上一个请求后才能处理下一个请求。

    2. 作为客户端可以支持类似gevent,twisted这样的异步IO,同时发送多个请求,然后等待请求结果。

    安装tornado

    pip3 install tornado
    

    image

    Tornado实例

    from tornado.httpclient import AsyncHTTPClient # 异步请求客户端
    from tornado.httpclient import HTTPRequest
    from tornado import ioloop  # 监听IO循环
    def handle_response(response):
        """
        处理返回值内容(需要维护计数器,来停止IO循环),调用 ioloop.IOLoop.current().stop()
        :param response:
        """
        if response.error:
            print("Error:", response.error)
        else:
            print(response.body)
    def func():
        url_list = [
            'http://www.baidu.com',
            'http://www.bing.com',
        ]
        for url in url_list:
            print(url)
            http_client = AsyncHTTPClient() # 异步发送请求
            # 封装请求的URL到HTTPRequest(url),执行完成后执行回调函数
            http_client.fetch(HTTPRequest(url), handle_response) 
    
    # 拿到一个IO循环并添加一个函数进去
    ioloop.IOLoop.current().add_callback(func)  # 函数执行且请求已经发送过去
    ioloop.IOLoop.current().start()  # 表示一直在等待请求的返回

    image

  • 相关阅读:
    常用知识点集合
    LeetCode 66 Plus One
    LeetCode 88 Merge Sorted Array
    LeetCode 27 Remove Element
    LeetCode 26 Remove Duplicates from Sorted Array
    LeetCode 448 Find All Numbers Disappeared in an Array
    LeetCode 219 Contains Duplicate II
    LeetCode 118 Pascal's Triangle
    LeetCode 119 Pascal's Triangle II
    LeetCode 1 Two Sum
  • 原文地址:https://www.cnblogs.com/ftl1012/p/9424877.html
Copyright © 2011-2022 走看看