线程池

  • 线程池

    • 导包:from multiprocessing.dummy import Pool
    • pool.map(callback,alist)
      • 让callback可以异步将alist中的列表元素进行某种形式的操作
      • 注意事项:callback必须要有一个参数、
    • 主要是被应用在耗时的操作
  • 单线程+多任务的异步协程

    • 特殊函数

      • 如果一个函数的定义被async关键字修饰后,则该函数就是一个特殊的函数。
      • 特殊之处:
        • 该函数被调用后函数内部的实现语句不会被立即执行。
        • 该函数会返回一个协程对象
    • 协程:

      • 对象。当特殊的函数被调用后,该函数就会返回一个协程对象。
      • 协程对象 == 特殊函数
    • 任务对象

      • 就是对协程对象的进一步封装(就是一个高级的协程对象)
      • 任务对象协程对象特殊函数
      • 绑定回调:
        • task.add_done_callback(funcName)
        • funName这个回调函数必须要带一个参数,这个参数表示的就是当前的任务对象
          • 参数.result():表示的就是当前任务对象对应的特殊函数的返回值
    • 事件循环对象:

      • 创建事件循环对象
        • asyncio.get_event_loop()
      • 需要将任务对象注册到该事件循环对象中且启动事件循环
        • loop.run_until_complete(task)
    • 等待(await):当阻塞操作结束后让loop回头执行阻塞之后的代码

    • 挂起(wait()):将当前的任务对象交出cpu的使用权

    • 【重点注意事项】:

      • 在特殊函数实现内部不可以出现不支持异步的模块代码,否则会中断整个的异步效果
    • aiohttp:

      • requests不支持异步,不可以出现在特殊函数内部。

      • aiohttp:支持异步的网络请求模块

        • pip install aiohttp
      • 代码的编写:

        • 写出基本架构
          with aiohttp.ClientSession() as sess:
          #with sess.get/post(url=url,headers=headers,data/params,proxy="http://ip:port") as response:
          with sess.get(url=url) as response:
          #text():获取字符串形式的响应数据
          #read():获取bytes类型的响应数据
          page_text = response.text()

                  return page_text
          
        • 补充细节

          • 在每一个with前加上async
          • 在每一个阻塞操作前加上await关键字
            • 代码参照完整代码
      • 完整代码:
        async with aiohttp.ClientSession() as sess:

        with sess.get/post(url=url,headers=headers,data/params,proxy="http://ip:port") as response:

        async with await sess.get(url=url) as response:
        #text():获取字符串形式的响应数据
        #read():获取bytes类型的响应数据
        page_text = await response.text()

         return page_text
        
  • 解析到带html标签的文本内容

    • bs4
posted @ 2020-01-07 12:18  xiongsheng  阅读(117)  评论(0编辑  收藏  举报