Chinaunix首页 | 论坛 | 博客
  • 博客访问: 642300
  • 博文数量: 198
  • 博客积分: 4256
  • 博客等级: 上校
  • 技术积分: 1725
  • 用 户 组: 普通用户
  • 注册时间: 2009-12-15 13:12
文章分类

全部博文(198)

文章存档

2012年(12)

2011年(39)

2010年(135)

2009年(12)

我的朋友

分类: Python/Ruby

2011-03-23 13:30:15

python多线程编程实例:

#!/usr/bin/env python
# -*- coding:utf-8 -*-

import cPickle
import os
import hashlib
import threading
from image import load
import Queue

queue = Queue.Queue()

class MutilThread(threading.Thread):
    def __init__(self,queue):
        threading.Thread.__init__(self)
        self.queue = queue
    def run(self):
#按照顺序执行,先put所有的的queue然后再逐步处理;
#while queue.qsize() != 0:
while True:
   url = self.queue.get()
   size = queue.qsize()
   print "Thread's Size: %s" % size
   SaveImage(url)
   self.queue.task_done()

def DownloadImage():
    Urllist = []
    url_li = getMedicineImage(Urllist)
    #先将所有的item,put到queue;
    #for url in url_li:
#queue.put(url)
    for i in range(4):
t = MutilThread(queue)
t.setDaemon(True)
t.start()
    for url in url_li:
queue.put(url)
#size = queue.qsize()
#print "Queue's Size: %s" % size
    queue.join()


def openFile(pickfile):
    f = open(pickfile,'rb')
    dct = cPickle.load(f)
    f.close()
    return dct

def SaveImage(url):
    tail = url.split('.')[-1]
    fl = hashlib.md5(url).hexdigest()
    dirname = "images/"
    f = open(dirname+fl+'.'+tail,'w')
    f.write(load(url))
    f.close()

def getMedicineImage(li):
    pickfile = "yaopin.pkl"
    hd = openFile(pickfile)
    for trunk in hd['yaopin']:
print trunk
        for sub in hd['yaopin'][trunk]:
            for medicine in hd['yaopin'][trunk][sub]:
                url = medicine['image_url']
                if url != "http://img.39.net/ypk/images/spic_bg.gif":
                    li.append(url)
    return li

def main():
#    getMedicineImage()
    DownloadImage()

if __name__=='__main__':
    main()


从某个网站上面抓取的数据以dict的格式保存在 yaopin.pkl 文件中
yaopin.pkl是使用cPickle保存的python 字典对象,从中取出所有图片的url,并序列化。
SaveImage 独立的单个线程
阅读(1501) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~