我正在使用urllib2,cstringIO和PIL。我需要真正調整它並使其速度非常快(至少爲當前速度的一半)在python中處理來自web的圖像的最快方法?
我使用以下方式訪問和加載圖像。
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的賞金。
嘗試分裂'get_image'最多見多少時間花費在網絡I/O,又有多少是花在了PIL。 – icktoofay 2012-02-27 00:51:08
@icktoofay說什麼。你確定你不只是達到網絡限制嗎?如果這是一個服務器響應時間問題,您可以嘗試通過'multiprocessing.Pool'來分割圖像以獲得一些併發下載。 – katrielalex 2012-02-27 01:00:20