2016-09-19 1 views
0

Я хочу использовать многопроцессорный процесс для складывания многих изображений. Каждый стек состоит из 5 изображений, что означает, у меня есть список изображений с подсписка изображений, которые должны быть объединены:Python многопроцессорные списки изображений

img_lst = [[01_A, 01_B, 01_C, 01_D, 01_E], [02_A, 02_B, 02_C, 02_D, 02_E], [03_A, 03_B, 03_C, 03_D, 03_E]]

в них момент я называю свою функцию do_stacking (sub_lst) с петлей:

for sub_lst in img_lst: 
    # example: do_stacking([01_A, 01_B, 01_C, 01_D, 01_E]) 
    do_stacking(sub_lst) 

I хочу ускорить многопроцессорность, но я не уверен, как вызвать функцию pool.map:

if __name__ == '__main__': 
    from multiprocessing import Pool 

    # I store my lists in a file 
    f_in = open(stacking_path + "stacks.txt", 'r') 
    f_stack = f_in.readlines() 

    for data in f_stack: 
     data = data.strip() 
     data = data.split('\t') 
     # data is now my sub_lst 

    # Not sure what to do here, set the sublist, f_stack? 
    pool = Pool() 
    pool.map(do_stacking, ???) 
    pool.close() 
    pool.join() 

Edit:

У меня есть список из списка:

[

[01_A, 01_B, 01_C, 01_D, 01_E],

[02_A, 02_B , 02_C, 02_D, 02_E],

[03_A, 03_B, 03_C, 03_D, 03_E]

]

Каждый подсписок должен быть передан в функцию под названием do_stacking (подсписок). Я только хочу перейти к подсписку, а не ко всему списку.

Вопрос: как обрабатывать цикл списка (для x в img_lst)? Должен ли я создать цикл для каждого пула?

ответ

1

Pool.map Работает как встроенная функция map. Она извлекает один элемент из второго аргумента каждый раз и передает его функции, которая представляет первый аргумент.

if __name__ == '__main__': 
    from multiprocessing import Pool 

    # I store my lists in a file 
    f_in = open(stacking_path + "stacks.txt", 'r') 
    f_stack = f_in.readlines() 
    img_list = [] 
    for data in f_stack: 
     data = data.strip() 
     data = data.split('\t') 
     # data is now my sub_lst 
     img_list.append(data) 
     print img_list # check if the img_list is right? 

    # Not sure what to do here, set the sublist, f_stack? 
    pool = Pool() 
    pool.map(do_stacking, img_list) 
    pool.close() 
    pool.join() 
+0

Но тогда do_stacking будет действовать только один из sub_lst (последний в img_list). – snowflake

+0

@snowflake Я думаю, что, возможно, что-то не так в 'img_list', которое построено в цикле for (проверьте его в своей среде, потому что я не знаю содержимое stacks.txt). Я просто запустил код. – tianwei

+0

Я думаю, что не очень хорошо объяснил, что хочу, я редактировал свой пост выше. Если я реализую ваше решение, do_stacking будет заботиться только о последнем подменю img_lst. – snowflake