django 多线程下载图片
example1:
from multiprocessing.dummy import Pool as ThreadPool #多线程
import time
import urllib2 urls = [
'http://www.python.org',
'http://www.python.org/about/',
'http://www.onlamp.com/pub/a/python/2003/04/17/metaclasses.html',
'http://www.python.org/doc/',
] # 单线程
start = time.time()
results = map(urllib2.urlopen, urls)
print 'Normal:', time.time() - start # 多线程
start2 = time.time()
# 开4个 worker,没有参数时默认是 cpu 的核心数
pool = ThreadPool(4)
# 在线程中执行 urllib2.urlopen(url) 并返回执行结果
results2 = pool.map(urllib2.urlopen, urls)
pool.close()
pool.join()
print 'Thread Pool:', time.time() - start2
example2:
#!/usr/bin/env python
# coding=utf-8 import os
import random
import requests
from cStringIO import StringIO
from PIL import Image
from multiprocessing.dummy import Pool as ThreadPool class Labelcode(object): def __init__(self, path='images'): self.base_path = os.path.dirname(__file__)
print 'self.base_path', self.base_path
totalImg = [os.path.join(self.base_path, path, fname) for fname in os.listdir(os.path.join(self.base_path, path))]
finished = [fname for fname in totalImg if fname.find('_')>1]
self.unfinished = [fname for fname in totalImg if fname not in finished] self.label_msg = {} # 当前信息
self.label_msg['totalCnt'] = len(totalImg)
self.label_msg['finishedCnt']= len(finished) if self.unfinished:
self.label_msg['fname'] = random.choice(self.unfinished)
else:
self.label_msg['fname'] = 'no img exists' def get_label_img(self, fname=None, result=''):
"""
标注相关验证码图片,并返回当前信息
"""
print self.base_path
print '---'*30
if fname in self.unfinished and len(result)>1:
newName = '%s/images/%s_%s.jpg' % (self.base_path, result, fname.split('/')[-1].split('.')[0])
if os.path.exists(fname):
os.rename(fname, newName) # 更新名字
self.unfinished.remove(fname)
self.label_msg['finishedCnt'] += 1
self.label_msg['fname'] = random.choice(self.unfinished) if self.unfinished:
self.label_msg['fname'] = random.choice(self.unfinished) return self.label_msg def download_img(self, img_url=None, web_name=None, cnt=1000):
"""
多线程下载图片
"""
res = {'totalCnt': cnt, 'finishedCnt':0}
if not img_url:
return res def get_html((img_ur, idx)):
try:
img = StringIO(requests.get(img_url).content)
img = Image.open(img).convert('RGB')
img.save('%s/images/%s/%d.jpg' % (self.base_path, web_name, idx))
res['finishedCnt'] += 1
except Exception as e:
print (e) web_name = web_name.strip().lower()
cnt = int(cnt) if cnt else 0
img_urls = []
pool = ThreadPool(10) # 同时开启 10 个线程
for i in range(cnt):
img_urls.append((img_url, i+500)) # 插入需要下载的url if not os.path.exists('%s/images/%s' % (self.base_path, web_name)):
os.makedirs('%s/images/%s' % (self.base_path, web_name)) pool.map(get_html, img_urls)
pool.close()
pool.join() return res if __name__ == '__main__': test = Labelcode()
url = 'https://passport.360.cn/captcha.php?m=create&app=i360&scene=login&userip=n7ASHVefL%2FAiu7j%2BPntTvQ%3D%3D&level=default&sign=c5d208'
print test.download_img(url, '', 10)
django 多线程下载图片的更多相关文章
- 多线程下载图片,滑动tableView崩溃--资源抢夺问题
最近练习使用NSoperation模拟SDWebImage下载图片,发生了崩溃的问题,还专门写博客记录这件事情: http://www.cnblogs.com/tufei7/p/7074030.htm ...
- android 多线程下载图片
很多时候我们需要在Android设备上下载远程服务器上的图片进行显示,今天Android123整理出两种比较好的方法来实现远程图片的下载. 方法一.直接通过Android提供的Http类访问远程服 ...
- 多线程下载图片,同步下载http://www.importnew.com/15731.html
package mutiDownload; import java.io.IOException; import java.io.InputStream; import java.io.RandomA ...
- SDWebImage 在多线程下载图片时防止错乱的策略
在我们使用sd的时候,对tableView 上cell得图片进行异步下载的时候会遇到这样一个问题: 由于cell的重用机制,在我们加载出一个cell的时候imageView数据源开启一个下载任务并返 ...
- curl多线程下载类
<?php /** * curl多线程下载类 */class MultiHttpRequest{ public $urls = array (); private $res = array () ...
- iOS多线程自定义operation加载图片 不重复下载图片
摘要:1:ios通过抽象类NSOperation封装了gcd,让ios的多线程变得更为简单易用: 2:耗时的操作交给子线程来完成,主线程负责ui的处理,提示用户的体验 2:自定义operati ...
- php中ob_get_contents、curl_multi_init、curl_init多线程下载远程图片并保存记录
php中三种方式测试图片下载效率 原文共24张不同图,每张大小在500K以上 使用时注意调整传入数组格式以及需要下载时保存地址的路径格式等 这三种方式无需额外安装扩展,方便快捷易操作[虽然效率看结果没 ...
- Python爬虫之多线程下载豆瓣Top250电影图片
爬虫项目介绍 本次爬虫项目将爬取豆瓣Top250电影的图片,其网址为:https://movie.douban.com/top250, 具体页面如下图所示: 本次爬虫项目将分别不使用多线程和使 ...
- [Xcode 实际操作]八、网络与多线程-(22)使用GCD多线程技术异步下载图片
目录:[Swift]Xcode实际操作 本文将演示如何使用使用GCD多线程技术异步下载图片. Grand Central Dispatch(GCD) 是 Apple 开发的一个多核编程的较新的解决方法 ...
随机推荐
- java 常见语法,但是发现switch等基础,常见面试套路不会了,待补充
1,面向对象,万物皆对象,面向对象的三个基本特性:封 装,继承,多态. 面向对象的程序都是由类组成,类封装了对象的属性和行为. 封装:隐藏对象的属性和实现细节,仅对外提供接口. 继承:实现代码复用,将 ...
- sass compass config.rb
require 'compass/import-once/activate' # Require any additional compass plugins here. # Set this to ...
- python安装requests
下面是requests的安装步骤: 1.如果系统已经装了Python,把D:\python3.6.5\Scripts添加到系统的环境变量PATH后面 2.cmd下cd到这个目录下D:\Python3. ...
- laravel 微信小程序登录 加密解密扩展包
https://github.com/lanceWan/wxxcx 测试的时候一定要保证服务器的 appid 和客户端的appid一致 如果是切换测试 那么需要把本地的项目从微信小程序上面删除掉 再 ...
- (淘宝无限适配)手机端rem布局详解
从网易与淘宝的font-size思考前端设计稿与工作流 本文结合自己对网易与淘宝移动端首页html元素上的font-size这个属性的思考与学习,讨论html5设计稿尺寸以及前端与设计之间协作流程的问 ...
- nginx概述
1)nginx的特性: 模块化设计,较好的扩展性 高可靠性 master/worker 支持热部署 不停机更新配置文件,更换日志,更新服务器程序版本 低内存消耗 支持event-driven,alo, ...
- Charles抓包基本用法
Charles抓包 浏览器发送和接受的所有请求都可以抓到 1.可以定位问题(如果看不出来是服务端问题还是前端问题) 2.可以设置弱网模式 清空请求按钮如图: 抓包: 1 打开charles,在浏览器中 ...
- c++ 生成dll文件并调用-转
.h(头文件) .lib(库文件) .dll(动态链接库文件) 之间的关系和作用的区分 .h头文件是编译时必须的,lib是链接时需要的,dll是运行时需要的. 附加依赖项的是.lib不是.dll, ...
- the implemention of redblack tree
public class redbalcktree { private class Node{ private int val; private int key; boolean color; //b ...
- latex之矩阵表示
$ \begin{matrix} 1 & 0 & 0\\ 0 & 1 & 0\\ 0 & 0 & 1 \end{matrix}\quad \begin{ ...