example1:

  1. from multiprocessing.dummy import Pool as ThreadPool #多线程
  2. import time
  3. import urllib2
  4.  
  5. urls = [
  6. 'http://www.python.org',
  7. 'http://www.python.org/about/',
  8. 'http://www.onlamp.com/pub/a/python/2003/04/17/metaclasses.html',
  9. 'http://www.python.org/doc/',
  10. ]
  11.  
  12. # 单线程
  13. start = time.time()
  14. results = map(urllib2.urlopen, urls)
  15. print 'Normal:', time.time() - start
  16.  
  17. # 多线程
  18. start2 = time.time()
  19. # 开4个 worker,没有参数时默认是 cpu 的核心数
  20. pool = ThreadPool(4)
  21. # 在线程中执行 urllib2.urlopen(url) 并返回执行结果
  22. results2 = pool.map(urllib2.urlopen, urls)
  23. pool.close()
  24. pool.join()
  25. print 'Thread Pool:', time.time() - start2

example2:

  1. #!/usr/bin/env python
  2. # coding=utf-8
  3.  
  4. import os
  5. import random
  6. import requests
  7. from cStringIO import StringIO
  8. from PIL import Image
  9. from multiprocessing.dummy import Pool as ThreadPool
  10.  
  11. class Labelcode(object):
  12.  
  13. def __init__(self, path='images'):
  14.  
  15. self.base_path = os.path.dirname(__file__)
  16. print 'self.base_path', self.base_path
  17. totalImg = [os.path.join(self.base_path, path, fname) for fname in os.listdir(os.path.join(self.base_path, path))]
  18. finished = [fname for fname in totalImg if fname.find('_')>1]
  19. self.unfinished = [fname for fname in totalImg if fname not in finished]
  20.  
  21. self.label_msg = {} # 当前信息
  22. self.label_msg['totalCnt'] = len(totalImg)
  23. self.label_msg['finishedCnt']= len(finished)
  24.  
  25. if self.unfinished:
  26. self.label_msg['fname'] = random.choice(self.unfinished)
  27. else:
  28. self.label_msg['fname'] = 'no img exists'
  29.  
  30. def get_label_img(self, fname=None, result=''):
  31. """
  32. 标注相关验证码图片,并返回当前信息
  33. """
  34. print self.base_path
  35. print '---'*30
  36. if fname in self.unfinished and len(result)>1:
  37. newName = '%s/images/%s_%s.jpg' % (self.base_path, result, fname.split('/')[-1].split('.')[0])
  38. if os.path.exists(fname):
  39. os.rename(fname, newName) # 更新名字
  40. self.unfinished.remove(fname)
  41. self.label_msg['finishedCnt'] += 1
  42. self.label_msg['fname'] = random.choice(self.unfinished)
  43.  
  44. if self.unfinished:
  45. self.label_msg['fname'] = random.choice(self.unfinished)
  46.  
  47. return self.label_msg
  48.  
  49. def download_img(self, img_url=None, web_name=None, cnt=1000):
  50. """
  51. 多线程下载图片
  52. """
  53. res = {'totalCnt': cnt, 'finishedCnt':0}
  54. if not img_url:
  55. return res
  56.  
  57. def get_html((img_ur, idx)):
  58. try:
  59. img = StringIO(requests.get(img_url).content)
  60. img = Image.open(img).convert('RGB')
  61. img.save('%s/images/%s/%d.jpg' % (self.base_path, web_name, idx))
  62. res['finishedCnt'] += 1
  63. except Exception as e:
  64. print (e)
  65.  
  66. web_name = web_name.strip().lower()
  67. cnt = int(cnt) if cnt else 0
  68. img_urls = []
  69. pool = ThreadPool(10) # 同时开启 10 个线程
  70. for i in range(cnt):
  71. img_urls.append((img_url, i+500)) # 插入需要下载的url
  72.  
  73. if not os.path.exists('%s/images/%s' % (self.base_path, web_name)):
  74. os.makedirs('%s/images/%s' % (self.base_path, web_name))
  75.  
  76. pool.map(get_html, img_urls)
  77. pool.close()
  78. pool.join()
  79.  
  80. return res
  81.  
  82. if __name__ == '__main__':
  83.  
  84. test = Labelcode()
  85. url = 'https://passport.360.cn/captcha.php?m=create&app=i360&scene=login&userip=n7ASHVefL%2FAiu7j%2BPntTvQ%3D%3D&level=default&sign=c5d208'
  86. 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. windows10下安装mysql-8.0.15-winx64以及连接服务器过程中遇到的一些问题

    一.下载安装配置mysql-8.0.15 1.官网(https://dev.mysql.com/downloads/mysql/)下载zip包 2.解包到我的D:\mysql目录下 3.为mysql配 ...

  2. Oracle获取当前年、月、日的方法

    Oracle获取当前年.月.日的方法 Oracle 获取当前年.月.日 1.//oracle中extract()函数从oracle 9i中引入,用于从一个date或者interval类型中截取到特定的 ...

  3. Visual Basic 2017 操作Excel和word【2】持续更新……

    1.控制台程序创建Excel,并设置状态栏显示“Hello World”文本 Module Module1 Private exitXL As Boolean = False Dim WithEven ...

  4. mysql装完计算机管理里面没mysql服务怎么解决(转)

    mysql装完计算机管理里面没mysql服务怎么解决 2017年07月04日 09:32:51 XC_Echizen 阅读数:7335 标签: mysql计算机mysql服务找不到mysql服务 更多 ...

  5. 剑指offer题库

    1.题目描述 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 思路: 因为矩阵的 ...

  6. Problem B: 平面上的点和线——Point类、Line类 (II)

    Description 在数学上,平面直角坐标系上的点用X轴和Y轴上的两个坐标值唯一确定,两点确定一条线段.现在我们封装一个“Point类”和“Line类”来实现平面上的点的操作. 根据“append ...

  7. 复制目录及其子目录下所有文件DOC

    echo 开始同步代码 set src_home=F:\work\sign\Bonade-Sign set dest_home=F:\work\testGit\sign5\Bonade-Sign se ...

  8. Java 获取class method parameter name

    package org.rx.util; import org.objectweb.asm.*; import java.io.IOException; import java.io.InputStr ...

  9. 2017年3月30日15:00:19 fq以后的以后 动态代理

    代理与继承,组合不同的是,继承是继承父类特性,组合是拼装组合类的特性,代理是使用代理类的指定方法并可以做自定义. 静态类是应用单个类,当代理的类数量较多时可用动态代理,动态代理在概念上很好理解 htt ...

  10. Linux 应用——常用函数(usual function)

    main函数: 新建testmain.c #include <sys/types.h>#include <sys/stat.h>#include <fcntl.h> ...