1. # cpu 的核心数
    # import os
    # print(os.cpu_count()) #
    # 爬虫的进程和线程的应用
    # 第一步 虚拟一个浏览器下载 在cmd 里输入 pip install requests 会下载并安装成功后
    # requests 意思就下载网站的源代码 没有解析的功能
    # import requests
    # response = requests.get('https://www.python.org')
    # # print(response) #
    # # 结果:<Response [200]> 只是内容网站内容并不会给解析
    # print(response.text) # 类型字符串 就是源代码
    # # =================================
    # 题目 解析网址的长度
    # import requests
    # from threading import current_thread # 什么意思
    # urls = ['https://www.python.org',
    # 'https://www.baidu.com',
    # 'https://www.jd.com',
    # 'https://www.tmall.com',]
    # def get(url):
    # print('%s GET %s'%(current_thread().getName(),url)) #谁在拿到谁
    # ##### current_thread().gernName() 好像是
    # response = requests.get(url)
    # if response.status_code == 200: #固定的 下载200才算成功
    # return {'url':url,'text':response.text}
    ### get(url) 是拿到网址 和内容 返回值给下边prase函数的上传参数 res
    # def prase(res): #解析
    # print('%s GET %s'%(current_thread().getName(),res['url']))
    # # ##print('[%s] prase res [%s]'%(res['url'],res['text'])) # ##和下边的是一样的 这个暂时不用
    # print('[%s] prase res [%s]'% (res['url'],len(res['text']))) #结果用长度替换字典的网址内容代码
    ##以上两行可以写成一行
    # print('[%s] <%s> (%s)'%(current_thread().getName(),res['url'],len(res['text'])))
  2.  
  3. # 方法一 普通
    # for url in urls:
    # res = get(url)
    # prase(res)
    # 结果: 通过循环正常 串着执行 打印出
    # MainThread GET https://www.python.org
    # MainThread GET https://www.python.org
    # [https://www.python.org] prase res [48856]
    # MainThread GET https://www.baidu.com
    # MainThread GET https://www.baidu.com
    # [https://www.baidu.com] prase res [2443]
    # MainThread GET https://www.jd.com
    # MainThread GET https://www.jd.com
    # [https://www.jd.com] prase res [124541]
    # MainThread GET https://www.tmall.com
    # MainThread GET https://www.tmall.com
    # [https://www.tmall.com] prase res [212078]
    #
    # ------------------------------
    #''
    # 异步调用:
    # 提交完任务(为该任务绑定一个回调函数),不用再原地等任务执行完毕拿到结果,可以直接提交下一个任务
    # 一个任务一旦执行完毕就会自动触发回调函数的运行
    #
    # 回调函数的参数是单一的:
    # 回调函数的参数就是它所绑定任务的返回值
    # 进程的用法
    import requests
    from concurrent.futures import ThreadPoolExecutor,ProcessPoolExecutor
    from threading import current_thread
    import time,os
    def get(url):
    print('%s GET %s' %(os.getpid(),url))
    response=requests.get(url)
    time.sleep(3)
    if response.status_code == 200:
    return {'url':url,'text':response.text}
    def parse(obj):
    res=obj.result()
    print('[%s] <%s> (%s)' % (os.getpid(), res['url'],len(res['text'])))
    if __name__ == '__main__':
    urls = [
    'https://www.python.org',
    'https://www.baidu.com',
    'https://www.jd.com',
    'https://www.tmall.com', ]
    t=ProcessPoolExecutor(2)
    for url in urls:
    t.submit(get,url).add_done_callback(parse)
    #add_done_callback(parse) 相当于一个按钮 前面对象结束后自动触发
    # 作用 增加一个回调函数
    t.shutdown(wait=True)
    print('主',os.getpid())
  4.  
  5. 线程的应用
    import requests
    from concurrent.futures import ThreadPoolExecutor,ProcessPoolExecutor
    from threading import current_thread
    import time
    import os
    def get(url):
    print('%s GET %s' %(current_thread().getName(),url))
    response=requests.get(url)
    time.sleep(3)
    if response.status_code == 200:
    return {'url':url,'text':response.text}
    def parse(obj):
    res=obj.result()
    print('[%s] <%s> (%s)' % (current_thread().getName(), res['url'],len(res['text'])))
    if __name__ == '__main__':
    urls = [
    'https://www.python.org',
    'https://www.baidu.com',
    'https://www.jd.com',
    'https://www.tmall.com',
    ]
    t=ThreadPoolExecutor(2)
    for url in urls:
    # obj = t.submit(get,url)
    # obj.result()
    t.submit(get,url).add_done_callback(parse)
    t.shutdown(wait=True)
    print('主',os.getpid())

day 33 线程池有关的的更多相关文章

  1. 深入浅出 Java Concurrency (33): 线程池 part 6 线程池的实现及原理 (1)[转]

    线程池数据结构与线程构造方法 由于已经看到了ThreadPoolExecutor的源码,因此很容易就看到了ThreadPoolExecutor线程池的数据结构.图1描述了这种数据结构. 图1 Thre ...

  2. SpringBoot普通消息队列线程池配置

    1 package com.liuhuan.study.config; 2 3 import com.google.common.util.concurrent.ThreadFactoryBuilde ...

  3. NGINX引入线程池 性能提升9倍

    1. 引言 正如我们所知,NGINX采用了异步.事件驱动的方法来处理连接.这种处理方式无需(像使用传统架构的服务器一样)为每个请求创建额外的专用进程或者线程,而是在一个工作进程中处理多个连接和请求.为 ...

  4. java多线程系类:JUC线程池:06之Callable和Future(转)

    概要 本章介绍线程池中的Callable和Future.Callable 和 Future 简介示例和源码分析(基于JDK1.7.0_40) 转载请注明出处:http://www.cnblogs.co ...

  5. 【转】线程及同步的性能 - 线程池 / ThreadPoolExecutors / ForkJoinPool

    线程池和ThreadPoolExecutors 虽然在程序中可以直接使用Thread类型来进行线程操作,但是更多的情况是使用线程池,尤其是在Java EE应用服务器中,一般会使用若干个线程池来处理来自 ...

  6. 并发包的线程池第一篇--ThreadPoolExecutor执行逻辑

    学习这个很长时间了一直没有去做个总结,现在大致总结一下并发包的线程池. 首先,任何代码都是解决问题的,线程池解决什么问题? 如果我们不用线程池,每次需要跑一个线程的时候自己new一个,会导致几个问题: ...

  7. 转:Java Web应用中调优线程池的重要性

    不论你是否关注,Java Web应用都或多或少的使用了线程池来处理请求.线程池的实现细节可能会被忽视,但是有关于线程池的使用和调优迟早是需要了解的.本文主要介绍Java线程池的使用和如何正确的配置线程 ...

  8. java多线程系类:JUC线程池:05之线程池原理(四)(转)

    概要 本章介绍线程池的拒绝策略.内容包括:拒绝策略介绍拒绝策略对比和示例 转载请注明出处:http://www.cnblogs.com/skywang12345/p/3512947.html 拒绝策略 ...

  9. 突破python缺陷,实现几种自定义线程池 以及进程、线程、协程的介绍

    Python线程 Threading用于提供线程相关的操作,线程是应用程序中工作的最小单元. #!/usr/bin/env python # -*- coding:utf-8 -*- import t ...

随机推荐

  1. 1 虚拟环境virtualenv

    一.windows下虚拟环境创建 1.1 虚拟环境virtualenv 如果在一台电脑上, 想开发多个不同的项目, 需要用到同一个包的不同版本, 如果使用上面的命令, 在同一个目录下安装或者更新, 新 ...

  2. Python操作excel的几种方式--xlrd、xlwt、openpyxl

    openpyxl xlrd xlwt   在处理excel数据时发现了xlwt的局限性–不能写入超过65535行.256列的数据(因为它只支持Excel 2003及之前的版本,在这些版本的Excel中 ...

  3. ACM-选人问题(救济金发放)

    n(n<20)个人站成一圈,逆时针编号为1-n.有两个官员,A从1开始逆时针数,B从n开 始顺时针数.在每一轮中,官员A数k个就停下来,官员B数m个就停下来(注意有可能两个 官员停在同一个人上) ...

  4. Git clone 常见用法

    二 克隆Git仓库     1.1 从远程仓库中克隆整个代码仓库 mkdir Demo //在当前路径下新建一个文件夹,用来存放将要拉取的整个代码库 cd Demo           //进入这个文 ...

  5. 2015-09-17html课程总结2+了解css

    7.多媒体 ①滚动字幕 <marquee>滚动的内容...</marquee> ②属性:align-----对齐方式(top middle  bottom) scroll--- ...

  6. Windows服务手动关闭教程

    Windows上关闭软件自启动,经常使用360等软件的开机加速功能去优化. 但有时候有些服务开机是启动的但在360中并没有找到那如何手动关闭这些服务的自启动呢? 下边以Autodesk Applica ...

  7. MySQL安装教程(mysql5.6_bundle)

    1.下载软件包 下载链接:https://dev.mysql.com/downloads/mysql/5.6.html#downloads centos6--MySQL-5.6.35-1.el6.x8 ...

  8. 操作系统IIS安装

    IIS在不同的操作系统的安装稍有些差异,如: 1.Windows XP 快捷安装IIS的话,推荐使用IIS一键安装程序包.或者找响应文件包i386,安装所需文件 2.Windows 7 安装IIS,则 ...

  9. BIOS、BootLoader、uboot对比

    BIOS BIOS是英文"Basic Input Output System"的缩略语,直译过来后中文名称就是"基本输入输出系统".其实,它是一组固化到计算机内 ...

  10. HTML5 ①

    <!DOCTYPE html> <!--声明当前页面是H5--> html框架: <html> <head lang="en"> & ...