• Python学习---IO的异步[asyncio +aiohttp模块]


    aiohttp

    aiohttp是在asyncio模块基础上封装的一个支持HTTP请求的模块,内容比8.4.2【基于asyncio实现利用TCP模拟HTTP请求】更全面

    安装aiohttp:

    pip3 install aiohttp

    asyncio + aiohttp实现异步请求【有问题】

    import aiohttp
    import asyncio
    @asyncio.coroutine
    def fetch_async(url):
        print(url)
        response = yield from aiohttp.request('GET', url)
        # data = yield from response.read()
        # print(url, data)
        print(url, response)
        response.close()
    tasks = [fetch_async('http://www.cnblogs.com/'), fetch_async('http://www.chouti.com/')]
    event_loop = asyncio.get_event_loop()
    results = event_loop.run_until_complete(asyncio.gather(*tasks))
    event_loop.close()

    image

    asyncio + requests完成IO异步

    asyncio + requests完成IO异步

    import asyncio
    import requests
    @asyncio.coroutine
    def fetch_async(func, *args): 
        # 获取事件循环:就是有个循环一直等待这用户的响应
        loop = asyncio.get_event_loop()
        future = loop.run_in_executor(None, func, *args) # 执行传递进来的get函数
        response = yield from future
        print(response.url, response.content)
    tasks = [
        fetch_async(requests.get, 'http://www.cnblogs.com/ftl1012/'),
        fetch_async(requests.get, 'http://dig.chouti.com/images/homepage_download.png')
    ]
    loop = asyncio.get_event_loop()
    results = loop.run_until_complete(asyncio.gather(*tasks))
    loop.close()

    image

  • 相关阅读:
    C语言-数组指针
    关于知网文章下载
    SpringBoot静态资源文件存放位置
    ArchLinux安装的vscode修改插件源
    I/O复用的高级应用三:同时处理TCP和UDP服务
    Windows查看动态库/静态库位数的方法
    VS 窗口程序没有输出时
    Windows下编译Boost
    VS设置C++代码注释模板
    No Target Architecture
  • 原文地址:https://www.cnblogs.com/ftl1012/p/9424792.html
Copyright © 2020-2023  润新知