мультипроцессорный (с использованием concurrent.futures) добавочный список - PullRequest
0 голосов
/ 01 февраля 2020

Я пытаюсь добавить значения в список. Но, поскольку это многопроцессорная обработка, список заканчивается только одним значением. Есть ли способ, где я могу добавить размеры всех изображений в список, а не только одно?

import cv2
import concurrent.futures
import os
length = []
def multi_proc(image):
    name = image[0:-4]
    im = cv2.imread(image)
    final_im = cv2.resize(im, (100,100))
    cv2.imwrite(name+"rs"+".png", final_im)
    l = im.shape
    print(l)
    length.append(l)

with concurrent.futures.ProcessPoolExecutor() as executor:
    sound_files = [f for f in os.listdir('.') if f.endswith('.png')]
    executor.map(multi_proc, sound_files)

Ответы [ 2 ]

1 голос
/ 01 февраля 2020
import cv2
import concurrent.futures
import os
length = []

def multi_proc(image):
    name = image[0:-4]
    im = cv2.imread(image)
    final_im = cv2.resize(im, (100,100))
    cv2.imwrite(name+"rs"+".png", final_im)
    l = im.shape
    print(l)
    return l


def app_img(l):
    length.append(l)

def start_processing():
    with concurrent.futures.ProcessPoolExecutor() as executor:
        sound_files = [f for f in os.listdir('.') if f.endswith('.png')]
        breakpoint()
        future_proc = {executor.submit(multi_proc, f): f for f in sound_files}
        for future in concurrent.futures.as_completed(future_proc):
            app_img(future.result())


if __name__ == "__main__":
    start_processing()
    print(len(length))

ввод: вывод 2 png файлов:

(225, 225, 3)
(313, 161, 3)
2
0 голосов
/ 01 февраля 2020

Вы можете просто использовать вложенные списки. Вместо length.append (l) попробуйте length.append ([im, final_im, l]).

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