# 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']))) # 方法一 普通
# 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()) 线程的应用
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. Confluence 6 设置你的个人空间主页

    不论你是否正在使用个人空间为沙盒来测试一些内容,组合灯显示是如何工作的,一个能够导航到其他空间和内容的页面,或者一些完全不同的东西.下面一些红能够帮助你在你的个人空间中更加有效的使用和发布信息. 使用 ...

  2. PHP策略模式demo

    <?php//策略模式就是你有很多的方法,选择一种适合自己的,// 单例模式就是只有一个实例对象,不需要每个文件都要加载,比如连接数据库,// 工厂模式就是//策略模式interface cha ...

  3. mysql find_in_set()函数的使用

    mysql 中 find_in_set() 函数语法: FIND_IN_SET(str,strList) str 要查询的字符串 strList 字段名,参数以“,”分隔,如(1,2,6,8) 查询字 ...

  4. SWUST OJ(952)

    单链表的插入操作实现 #include <stdio.h> #include <stdlib.h> typedef struct LinkList { int data; st ...

  5. 牛客寒假算法基础集训营6 I-wzoi

    题目链接 分析:这个题本质上可以看成是一个括号匹配题,因为当出现00和11的时候,毫无疑问是前一天看题,后一天写题,这样可以得到最大的得分10 将全部00和11删掉后,就是交替出现的01串了 代码如下 ...

  6. 『Python』skimage图像处理_旋转图像

    一段简短的实现图像旋转的代码,使用了skimage库,据说和PIL相比,skimage对numpy等科学计算库的支持更好,这里是为了完成师兄给的帮他修改程序的任务,如果以后有需求的话可能会对pytho ...

  7. CF-339D-线段树

    http://codeforces.com/problemset/problem/339/D 给出一个序列.每次更改其中一个值然后询问序列的f(),序列的f()定义为: 每相邻两个元素按位或得到长度减 ...

  8. 11204RAC-dbca建库脚本

    SET VERIFY OFFconnect "SYS"/"&&sysPassword" as SYSDBAset echo onspool /u ...

  9. ThinkPHP3的使用

    1. 初始目录 7d 根目录 ├─Application 应用目录(空) ├─Public 资源文件目录 ├─ThinkPHP 框架目录 └─index.php 入口文件 2. 入口文件 // 应用入 ...

  10. 使用CSDN-markdown编辑器

    欢迎使用Markdown编辑器写博客 本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦: Markdown和扩展Markdown简洁的语法 代码块高亮 图片链接 ...