Python мульти обработка для изменения размера изображения - PullRequest
0 голосов
/ 05 марта 2020

Вот пример кода: мой код в основном создает 128-битное изображение в нескольких папках, но до этого он работал медленно. поэтому я реализовал многопроцессорность, но код не работает.

def ProcessLevel(level, stopLevel = 0):
global x,x1Up
xFolders = os.listdir(str(level)) 

if not os.path.exists(str(level-1)):
    os.makedirs(str(level-1))


for x in xFolders:

    print(str(level) + "/" + x)

    yFiles = os.listdir(str(level) + "/" + x)
    print(yFiles)
    x1Up = str(int(int(x) / 2))
    if not os.path.exists(str(level-1) + "/" + x1Up):
        os.makedirs(str(level-1) + "/" + x1Up)
    pool = Pool(4)
    h = str
    pool.map(create_thumbnail,[(h) for size in yFiles])
    print(x1Up)

    pool.close()
    pool.join()

if level > stopLevel + 1:
    return ProcessLevel(level - 1, stopLevel)
else:
    return True


   ProcessLevel(14)

Выше приведена основная функция, в которой вызывается многопроцессорность, и есть еще одна функция для создания эскиза

     def create_thumbnail(yFile):
        print (yFile)
        y = yFile.split(".")[0]
        print(y)
        y1Up = str(int(int(y) / 2))
        ProcessLevel()
        im = Image.open(str(level) + "/" + x + "/" + yFile)
        im.thumbnail((128,128))

        parent = None

        try:
            parent = Image.open(str(level - 1) + "/" + x1Up + "/" + y1Up + ".png")
        except:
            parent = Image.new("RGBA", (256, 256), (256, 0, 256, 256))

        xOffset = 0
        yOffset = 0

        if int(x) & 1:
            xOffset = 128

        if int(y) & 1:
            yOffset = 128

        parent.paste(im, (xOffset, yOffset, xOffset + 128, yOffset + 128))

        parent.save(str(level - 1) + "/" + x1Up + "/" + y1Up + ".png")
        end = timer() 
        print(end - start) # Time in seconds, e.g. 5.38091952400282  
...