python笔记13-多线程实战篇(tomorrow)
安装
1.tomorrow安装,用pip可以直接安装
pip install tomorrow
单线程
1。以下案例是单线程时候跑的情况,在下载图片的时候很耗时。
# coding:utf-8
from bs4 import BeautifulSoup
import requests
import os
import time
# 当前脚本所在的目录
cur_path = os.path.dirname(os.path.realpath(__file__))
def get_img_urls():
r = requests.get("http://699pic.com/sousuo-218808-13-1.html")
fengjing = r.content
soup = BeautifulSoup(fengjing, "html.parser")
# 找出所有的标签
images = soup.find_all(class_="lazy")
return images
def save_img(imgUrl):
try:
jpg_rl = imgUrl["data-original"]
title = imgUrl["title"]
# print(title)
# print(jpg_rl)
# print("")
# 判断是否有jpg文件夹,不存在创建一个
save_file = os.path.join(cur_path, "jpg")
if not os.path.exists(save_file): os.makedirs(save_file)
with open(os.path.join(save_file, title+'.jpg'), "wb") as f:
f.write(requests.get(jpg_rl).content)
except:
pass
if __name__ == "__main__":
t1 = time.time()
image_ulrs = get_img_urls()
for i in image_ulrs:
save_img(i)
t2 = time.time()
print("总耗时:%.2f 秒"%(t2-t1))
运行结果:
耗时:4.27 秒
使用多线程tomorrow
1.一行代码搞定多线程,在函数上加个@threads(5),括号里面代码线程的数量,数字越大,运行的速度越快
# coding:utf-8
from bs4 import BeautifulSoup
import requests
import os
import time
from tomorrow import threads
# 当前脚本所在的目录
cur_path = os.path.dirname(os.path.realpath(__file__))
def get_img_urls():
r = requests.get("http://699pic.com/sousuo-218808-13-1.html")
fengjing = r.content
soup = BeautifulSoup(fengjing, "html.parser")
# 找出所有的标签
images = soup.find_all(class_="lazy")
return images
@threads(5)
def save_img(imgUrl):
try:
jpg_rl = imgUrl["data-original"]
title = imgUrl["title"]
# print(title)
# print(jpg_rl)
# print("")
# 判断是否有jpg文件夹,不存在创建一个
save_file = os.path.join(cur_path, "jpg")
if not os.path.exists(save_file): os.makedirs(save_file)
with open(os.path.join(save_file, title+'.jpg'), "wb") as f:
f.write(requests.get(jpg_rl).content)
except:
pass
if __name__ == "__main__":
t1 = time.time()
image_ulrs = get_img_urls()
for i in image_ulrs:
save_img(i)
t2 = time.time()
print("总耗时:%.2f 秒"%(t2-t1))
运行结果:
总耗时:0.24 秒
参考github案例:Tomorrow
python自动化交流 QQ群:779429633
python笔记13-多线程实战篇(tomorrow)的更多相关文章
- Python笔记_第四篇_高阶编程_进程、线程、协程_5.GPU加速
Numba:高性能计算的高生产率 在这篇文章中,笔者将向你介绍一个来自Anaconda的Python编译器Numba,它可以在CUDA-capable GPU或多核cpu上编译Python代码.Pyt ...
- [Python笔记]第十六篇:web框架之Tornado
Tornado是一个基于python的web框架,xxxxx 安装 python -m pip install tornado 第一个Tornado程序 安装完毕我们就可以新建一个app.py文件,放 ...
- 【新手必学】Python爬虫之多线程实战
前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理.作者:清风化煞_ 正文 新手注意:如果你学习遇到问题找不到人解答,可以点 ...
- 《一头扎进》系列之Python+Selenium自动化测试框架实战篇6 - 价值好几K的框架,呦!这个框架还真牛叉哦!!!
1. 简介 本文开始介绍如何通过unittest来管理和执行测试用例,这一篇主要是介绍unittest下addTest()方法来加载测试用例到测试套件中去.用addTest()方法来加载我们测试用例到 ...
- Python笔记_第五篇_Python数据分析基础教程_NumPy基础
1. NumPy的基础使用涵盖如下内容: 数据类型 数组类型 类型转换 创建数组 数组索引 数组切片 改变维度 2. NumPy数组对象: NumPy中的ndarray是一个多维数组对象,该兑现共有两 ...
- Python笔记_第四篇_高阶编程_魔法(术)方法详解(重载的再详解)
1. 魔法方法是什么? 魔法方法(Magic Method)是Python比较独特的应用,它可以给你的类增加特殊的方法,如果你的对象实现了(重载),这些方法中的某一个,就会被Python所调用.正如装 ...
- Python笔记_第四篇_高阶编程_再议装饰器和再议内置函数
1. 概述: 我们在前面用了很多的装饰器这个工具的方法.这个位置要系统的讲一下装饰器. 1.2 为什么需要装饰器. 装饰器本质是一个Python函数,它可以让其他函数在不需要任何代码变动的前提下增加额 ...
- Python笔记_第三篇_面向对象_4.单下划线和双下划线
说道这里我们需要稍微暂停一下.前面我们说到了类是作为一个对象存放容器.这个容器里面有属性和方法.最好的理解类的方式就是把类想想成一个容器. 然后构造了一个析构函数和构造函数,然后又对object和se ...
- python笔记-13 mysql与sqlalchemy
一.RDBMS relational database management system 关系型数据库引入 1.数据库的意义 更有效和合理的存储读取数据的一种方式 关系模型基础上的数据库 -> ...
随机推荐
- NFS+inotify实时同步
Inotify简介 Inotify是一种文件系统事件通告机制,能够实时监控文件系统下文件的访问.修改.删除等各种变化情况并将其作为事件通告给用户态应用程序.Linux内核从2.6.13版本后已经集成了 ...
- nowcoder 提高第六场A题
Solution 60分 因为所有的字母要么全相同要么全不同, 所以两条路径比较字典序只需要比较第一条边就可以, 于是建反图, 在反图上按拓扑序转移就可以. 因为有环, 所以拓扑完入度还是不为0的点答 ...
- hihocoder 1178 : 计数
#1178 : 计数 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 Rowdark是一个邪恶的魔法师.在他阅读大巫术师Lich的传记时,他发现一类黑魔法来召唤远古生物, ...
- ReentrantLock 学习
Java接口Lock有三个实现类:ReentrantLock.ReentrantReadWriteLock.ReadLock和ReentrantReadWriteLock.WriteLock.Lock ...
- hdu 1114(完全背包)
Piggy-Bank Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total ...
- Majority Element——算法课上的一道题(经典)
Given an array of size n, find the majority element. The majority element is the element that appear ...
- stl 学习笔记
1. Erasing multiple objects from a std::vector https://stackoverflow.com/questions/3487717/erasing-m ...
- PHP数组转对象,对象转数组
废话不多,直接上代码: <?php class object_array{ //数组转对象 public static function array_to_object($e){ if(gett ...
- Docker for Windows 里的Shared Drives 设置不生效
原文地址:传送门 问题描述:Docker中的settings里的Shared Drives 选择对应盘符后,点击Apply后无法生效,没办法选择对应盘符进行分享. 解决办法:win+R ,键入gped ...
- jstree无限级菜单ajax按需动态加载子节点
业余时间研究了一下jstree,更新非常快已经是3.0了,首先看一下效果截图: 1.页面引入样式和脚本(注意路径根据实际情况) <link href="~/Scripts/vakata ...