zoukankan      html  css  js  c++  java
  • python asyncio as_completed

    #asyncio 没有提供http协议的接口 aiohttp
    import asyncio
    import socket
    from urllib.parse import urlparse
    
    
    async def get_url(url):
        #通过socket请求html
        url = urlparse(url)
        host = url.netloc
        path = url.path
        if path == "":
            path = "/"
    
        #建立socket连接
        reader, writer = await asyncio.open_connection(host,80)
        writer.write("GET {} HTTP/1.1
    Host:{}
    Connection:close
    
    ".format(path, host).encode("utf8"))
        all_lines = []
        async for raw_line in reader:
            data = raw_line.decode("utf8")
            all_lines.append(data)
        html = "
    ".join(all_lines)
        return html
    
    async def main():
        tasks = []
        for url in range(20):
            url = "http://shop.projectsedu.com/goods/{}/".format(url)
            tasks.append(asyncio.ensure_future(get_url(url)))
        for task in asyncio.as_completed(tasks): # 类似于线程池中的task一样
            result = await task # 这里要使用await 等待其完成
            print(result)
    
    if __name__ == "__main__":
        import time
        start_time = time.time()
        loop = asyncio.get_event_loop()
        loop.run_until_complete(main())
        print('last time:{}'.format(time.time()-start_time))
  • 相关阅读:
    Linux ps命令
    SecureCRT注册机使用方法
    微信消息的处理和应答
    微信公众号开发--开发服务器接入微信服务器
    RESTful架构
    OAuth2.0详解
    HTTP头详解
    Cookie/Session机制详解
    学习tornado:安全
    python tornado框架实现CRUD
  • 原文地址:https://www.cnblogs.com/callyblog/p/11222332.html
Copyright © 2011-2022 走看看