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 多线程下载图片的更多相关文章

  1. 多线程下载图片,滑动tableView崩溃--资源抢夺问题

    最近练习使用NSoperation模拟SDWebImage下载图片,发生了崩溃的问题,还专门写博客记录这件事情: http://www.cnblogs.com/tufei7/p/7074030.htm ...

  2. android 多线程下载图片

    很多时候我们需要在Android设备上下载远程服务器上的图片进行显示,今天Android123整理出两种比较好的方法来实现远程图片的下载.   方法一.直接通过Android提供的Http类访问远程服 ...

  3. 多线程下载图片,同步下载http://www.importnew.com/15731.html

    package mutiDownload; import java.io.IOException; import java.io.InputStream; import java.io.RandomA ...

  4. SDWebImage 在多线程下载图片时防止错乱的策略

    在我们使用sd的时候,对tableView  上cell得图片进行异步下载的时候会遇到这样一个问题: 由于cell的重用机制,在我们加载出一个cell的时候imageView数据源开启一个下载任务并返 ...

  5. curl多线程下载类

    <?php /** * curl多线程下载类 */class MultiHttpRequest{ public $urls = array (); private $res = array () ...

  6. iOS多线程自定义operation加载图片 不重复下载图片

    摘要:1:ios通过抽象类NSOperation封装了gcd,让ios的多线程变得更为简单易用:   2:耗时的操作交给子线程来完成,主线程负责ui的处理,提示用户的体验   2:自定义operati ...

  7. php中ob_get_contents、curl_multi_init、curl_init多线程下载远程图片并保存记录

    php中三种方式测试图片下载效率 原文共24张不同图,每张大小在500K以上 使用时注意调整传入数组格式以及需要下载时保存地址的路径格式等 这三种方式无需额外安装扩展,方便快捷易操作[虽然效率看结果没 ...

  8. Python爬虫之多线程下载豆瓣Top250电影图片

    爬虫项目介绍   本次爬虫项目将爬取豆瓣Top250电影的图片,其网址为:https://movie.douban.com/top250, 具体页面如下图所示:   本次爬虫项目将分别不使用多线程和使 ...

  9. [Xcode 实际操作]八、网络与多线程-(22)使用GCD多线程技术异步下载图片

    目录:[Swift]Xcode实际操作 本文将演示如何使用使用GCD多线程技术异步下载图片. Grand Central Dispatch(GCD) 是 Apple 开发的一个多核编程的较新的解决方法 ...

随机推荐

  1. 获取ip地址&&测试ip地址

    # request# 动态页面加载 Selenium# request# 响应类型为 json# import json # json.loads(str) # 将str转化为dict# json.d ...

  2. 精选!15 个必备的 VSCode 插件(前端类)

      精选!15 个必备的 VSCode 插件(前端类)   就像大多数 IDE 一样,VSCode 也有一个扩展和主题市场,包含了数以千计质量不同的插件.为了帮助大家挑选出值得下载的插件,我们针对性的 ...

  3. Faster-RCNN 自己的数据训练

    参考网址:https://blog.csdn.net/l297969586/article/category/7178545(一呆飞仙)Faster-RCNN_TF代码解读,参考网址:https:// ...

  4. 基于lnmp环境安装Discuz

    安装环境 Linux:CentOS Linux release 7.5.1804 (Core) nginx:1.14.2 php-fpm:5.4.16 mariadb-server:5.5.60 基本 ...

  5. Django学习教程

    教程link:https://code.ziqiangxuetang.com/django/django-install.html 最好用虚拟环境学习django,用pycharm时要注意所选的pyt ...

  6. nodejs -- fs模块 ---> readFile 函数 1) fs.readFile(filename, "binary", function(error, file) 2) response.write(file, "binary");

    一:代码: 1.1 入口文件: index.js var server = require('./server'); var router = require("./router" ...

  7. sed语法

    Sed 命令行 以下是我们可以指定单引号在命令行sed命令的格式如下: sed [-n] [-e] 'command(s)' files 例子 考虑一下我们有一个文本文件books.txt待处理,它有 ...

  8. element-ui Select 清空model,页面没有清空选中项的问题

    业务场景: 在dialog 每次打开时, 选择应用程序要初始化为空. 最初的做法为: 监听dialog的show状态,当show为false时,设置selectApp为空这样写时,虽然selectAp ...

  9. BZOJ - 3170: 松鼠聚会 (切比雪夫转曼哈顿距离)

    pro:  有N个小松鼠,它们的家用一个点x,y表示,两个点的距离定义为:点(x,y)和它周围的8个点即上下左右四个点和对角的四个点,距离为1.现在N个松鼠要走到一个松鼠家去,求走过的最短距离.0&l ...

  10. latex之插入向量、图片、编号

    1.向量 $\vec a$\qquad $\overleftarrow{AB}$\qquad $\overleftrightarrow{AB}$\qquad $\overrightarrow{AB}$ ...