Контекст
Я часто оказывался в следующей ситуации:
- У меня есть список имен файлов изображений, которые мне нужно обработать
- Я читаю каждое изображение последовательно, используя, например, scipy.misc.imread
- Затем я делаю какую-то обработку на каждом изображении и возвращаю результат
- Я сохраняю результат по имени файла изображения в полке
Проблема в том, что простое считывание изображения занимает незначительное время, иногда сравнимое или даже дольше, чем обработка изображения.
Вопрос
Итак, я думал, что в идеале я мог бы читать изображение n + 1 во время обработки изображения n. Или даже лучше обрабатывать и считывать сразу несколько изображений автоматически оптимальным образом?
Я читал о многопроцессорности, потоках, витой, gevent и т.д., но я не могу понять, какой из них использовать и как реализовать эту идею. У кого-нибудь есть решение этой проблемы?
Минимальный пример
# generate a list of images
scipy.misc.imsave("lena.png", scipy.misc.lena())
files = ['lena.png'] * 100
# a simple image processing task
def process_image(im, threshold=128):
label, n = scipy.ndimage.label(im > threshold)
return n
# my current main loop
for f in files:
im = scipy.misc.imread(f)
print process_image(im)