我正在使用urllib2,cstringIO和PIL。我需要真正调整它并使它非常快(至少是当前速度的一半)
我使用下面的方式访问和加载图像。
imageurl = "http://bit.ly/wOqVTE"
@log_performance
def get_image(imageurl):
img_file = urllib.urlopen(imageurl)
data = StringIO(img_file.read())
im = Image.open(data)
size = 128, 128
im.thumbnail(size, Image.ANTIALIAS)
return im
然后使用:
处理图像@log_performance
def process_image(image, sample_limit=10000, top=10):
colors = image.getcolors(sample_limit)
sc = sorted(colors, key=lambda x: x[0], reverse=True)
return sc[:top]
获取图像平均需要0.6秒,处理时间约为0.006秒。
如何加快获取和加载过程?
可以在这里找到完整的要点。 https://gist.github.com/1920167
>>>>Function: get_image, Executed:20, Avg Time:0.558275926113
>>>>Function: process_image, Executed:20, Avg Time:0.00609920024872
我会为有一半时间的人增加50美元的赏金。
答案 0 :(得分:2)
由于它获取的图像占用时间最长,为什么不使用线程(或Gevent)同时获取这些图像,将结果抛出到任务队列中,并在它们准备就绪时进行处理。
为具有相同网址的图片添加缓存...
答案 1 :(得分:0)
由于图像提取取决于网络I / O速度,因此您应该使用异步I / O来提高整体性能。