0

urllib2, cstringIO 및 PIL을 사용하고 있습니다. 나는 이것을 실제로 조정해야하고 매우 빠르게 만들 필요가 있습니다 (현재 속도의 절반 이상).Python으로 웹에서 이미지를 처리하는 가장 빠른 방법은 무엇입니까?

아래를 사용하여 이미지에 액세스하고로드합니다. 이 평균 0.6 초가 걸립니다

@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.006 초를 얻을 :

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 

나서 사용하여 이미지를 처리한다.

어떻게 처리 속도를 높일 수 있습니까?

전체 요점은 여기에서 찾을 수 있습니다. 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

시도 분할'PIL에 소요되는 네트워크 I/O 및 정도에 시간의 양 볼까지 get_image'. – icktoofay

+1

@icktoofay는 말했습니다. 네트워크 한계를 맞추는 것이 아니라고 확신합니까? 이것이 서버 응답 시간 문제라면'multiprocessing.Pool'을 통해 이미지를 가져 와서 몇 번의 동시 다운로드를 시도 할 수 있습니다. – katrielalex

답변

2

오랜 시간이 걸리는 이미지를 얻었으므로 스레딩 (또는 Gevent)을 사용하여 이미지를 동시에 가져 와서 결과를 작업 대기열에 던지고 준비가되면 처리하십시오.

그리고 같은 URL을 이미지에 대한 캐시를 추가 ...

관련 문제