Самый быстрый способ обработки изображений из Интернета в Python? - PullRequest
0 голосов
/ 27 февраля 2012

Я использую 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 за каждого, кто может половину времени.

Ответы [ 2 ]

2 голосов
/ 27 февраля 2012

Поскольку получение изображений занимает больше всего времени, почему бы не использовать многопоточность (или Gevent) для одновременного получения этих изображений, выбросить результаты в очередь задач и обработать их, когда они будут готовы.

Идобавить кеш для изображений с таким же URL ...

0 голосов
/ 27 февраля 2012

Поскольку выборка изображения зависит от скорости сетевого ввода-вывода, для повышения общей производительности следует использовать асинхронный ввод-вывод.

Ссылка: http://sourceforge.net/projects/asynchttp/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...