2010-11-01 4 views
2

У меня есть 16-ядерная машина, но моя текущая функция изменения размера использует только одно ядро, которое действительно неэффективно для большого каталога изображений.В Python, учитывая каталог полноразмерных изображений, как я могу создавать эскизы, используя более одного ядра ЦП?

def generateThumbnail(self, width, height): 
    """ 
    Generates thumbnails for an image 
    """ 
    im = Image.open(self._file) 
    (detected_width,detected_height) = im.size 

    #Get cropped box area 
    bbox = self.getCropArea(detected_width, detected_height, width, height) 

    #Crop to box area 
    cropped_image = im.crop(bbox) 

    #Resize to thumbnail 
    cropped_image.thumbnail((width, height), Image.ANTIALIAS) 

    #Save image 
    cropped_image.save(self._path + str(width) + 'x' + 
      str(height) + '-' + self._filename, "JPEG") 

Любая помощь была бы принята с благодарностью. Спасибо.

ответ

5

Это звучит как хорошее решение для модуля multiprocessing, который использует интерфейс потоковой передачи, но создает отдельные процессы вместо потоков.

+0

Обратите внимание, что вы должны * иметь возможность делать это с помощью обычных потоков, поскольку вызовы PIL являются родными и могут освобождать GIL. К сожалению, вызовы PIL несовместимы в этом: изменение размера изображений приводит к выпуску GIL, но в последний раз, когда я проверял, чтение и запись JPEG-файлов - нет. Поэтому в этом случае вы все еще хотите «многопроцессорство», но только в качестве обходного пути для ошибки. –

 Смежные вопросы

  • Нет связанных вопросов^_^