zoukankan      html  css  js  c++  java
  • aiohttp使用

    aiohttp使用

    一、快速回顾

    1. 多线程

    1. #_*_coding:utf-8_*_ 
    2.  
    3. import time 
    4. import requests 
    5. from multiprocessing.dummy import Pool 
    6. from multiprocessing.pool import ThreadPool 
    7.  
    8. pool = Pool(3) 
    9.  
    10. urls = ["http://www.baidu.com" for i in range(3)] 
    11. print(urls) 
    12.  
    13. def get_req(url): 
    14. r = requests.head(url) 
    15.  
    16. print(r) 
    17. return r 
    18.  
    19. ret_list = pool.map(get_req, urls) 
    20. print(ret_list) 
    21.  
    22.  
    23. def analysis_req(data): 
    24. r = "analysis data: {}, {}, {}".format(len(data.headers), data.status_code, data.text) 
    25. return r 
    26.  
    27. ret_list = pool.map(analysis_req, ret_list) 
    28. print(ret_list) 

    输出
    [‘http://www.baidu.com’, ‘http://www.baidu.com’, ‘http://www.baidu.com’]
    <Response [200]>
    <Response [200]>
    <Response [200]>
    [<Response [200]>, <Response [200]>, <Response [200]>]
    ['analysis data: 8, 200, ', 'analysis data: 8, 200, ', 'analysis data: 8, 200, ']

    2. asyncio几个概念

    1. 协程对象
    2. 任务对象
    3. 事件循环
    4. await
    • 协程对象: 可以把协程当做是一个特殊的函数.如果一个函数的定义被async关键字所修饰.该特殊的函数被调用后函数内部的程序语句不会被立即执行,而是会返回一个协程对象.
    • 任务对象: 所谓的任务对象就是对协程对象的进一步封装.在任务对象中可以实现显示协程对象的运行状况. 任务对象最终是需要被注册到事件循环对象中.
      • 绑定回调:回调函数是绑定给任务对象,只有当任务对象对应的特殊函数被执行完毕后,回调函数才会被执行
    • 事件循环对象:无限循环的对象.也可以把其当成是某一种容器.该容器中需要放置多个任务对象(就是一组待执行的代码块).
      • 异步的体现: 当事件循环开启后,该对象会安装顺序执行每一个任务对象,
        当一个任务对象发生了阻塞事件循环是不会等待,而是直接执行下一个任务对象
    • await: 挂起的操作.交出cpu的使用权

    2-1. 例子: 单个任务

    1. from time import sleep 
    2. import asyncio 
    3.  
    4.  
    5. # 回调函数: 
    6. # 默认参数:任务对象 
    7. def callback(task): 
    8. print('i am callback!!1') 
    9. print(task.result()) # result返回的就是任务对象对应的那个特殊函数的返回值 
    10.  
    11.  
    12. async def get_request(url): 
    13. print('正在请求:', url) 
    14. sleep(2) 
    15. print('请求结束:', url) 
    16. return 'hello bobo' 
    17.  
    18.  
    19. # 创建一个协程对象 
    20. c = get_request('www.163.com') 
    21. print(c) # <coroutine object get_request at 0x0000023337E1CEB8> 
    22. # 封装一个任务对象 
    23. task = asyncio.ensure_future(c) 
    24.  
    25. # 给任务对象绑定回调函数 
    26. task.add_done_callback(callback) 
    27.  
    28. # 创建一个事件循环对象 
    29. loop = asyncio.get_event_loop() 
    30. loop.run_until_complete(task) # 将任务对象注册到事件循环对象中并且开启了事件循环 

    <coroutine object get_request at 0x7fd3e0228938>
    正在请求: www.163.com
    请求结束: www.163.com
    i am callback!!1
    hello bobo

    二、sdfsdfsdf

  • 相关阅读:
    Java线程池
    代理模式
    Bean的加载
    Spring的启动流程
    MFC编程入门之二十七(常用控件:图片控件PictureControl)
    MFC编程入门之二十六(常用控件:滚动条控件ScrollBar)
    MFC编程入门之二十五(常用控件:组合框控件ComboBox)
    MFC编程入门之二十四(常用控件:列表框控件ListBox)
    MFC编程入门之二十三(常用控件:按钮控件的编程实例)
    MFC编程入门之二十二(常用控件:按钮控件Button、Radio Button和Check Box)
  • 原文地址:https://www.cnblogs.com/liujianzuo888/p/12981643.html
Copyright © 2011-2022 走看看