簡體   English   中英

Python,圖像壓縮和多處理

[英]Python, image compression and multiprocessing

我試圖用Python來處理MultiProcessing,但是我做不到。 請注意,在一切編程中,我曾經是,現在可能永遠是菜鳥。 啊,反正。 來了

我正在編寫一個Python腳本,使用來自用戶的預定義變量將存儲在ini文件中的圖像壓縮到使用ImageMagick下載到文件夾的圖像。 該腳本在下載目錄中搜索與模式匹配的文件夾,檢查它們是否包含JPG,PNG或其他圖像文件,如果是,則重新壓縮並重命名它們,並將結果存儲在“壓縮”文件夾中。

現在,事情來了:如果我能夠“並行化”整個壓縮過程,我會很喜歡的,但是...我不明白我該怎么做。

我不想對現有代碼感到厭倦,因為它很爛。 這只是一個簡單的“目錄中的文件”循環。 那就是我想要並行化的東西-有人可以舉一個例子說明如何對目錄中的文件使用多處理嗎?

我的意思是,讓我們看一下這段簡單的代碼:

對於matching_directory中的f:打印(“我要處理文件:”,f)

對於那些必須偷看代碼的人,這是我想整個並行化位都將保留的部分:

for f in ImageFolders:
    print (splitter)
    print (f)
    print (splitter)
    PureName = CleanName(f)
    print (PureName)
    for root, dirs, files in os.walk(f):
        padding = int(round( math.log( len(files), 10))) + 1
        padding = max(minpadding, padding)
        filecounter = 0
        for filename in files:
            if filename.endswith(('.jpg', '.jpeg', '.gif', '.png')):
                filecounter += 1
                imagefile, ext = os.path.splitext(filename)
                newfilename = "%s_%s%s" % (PureName, (str(filecounter).rjust(padding,'0')), '.jpg')
                startfilename = os.path.join (f, filename)
                finalfilename = os.path.join(Dir_Images_To_Publish, PureName, newfilename)
                print (filecounter, ':', startfilename, ' >>> ', finalfilename)
                Original_Image_FileList.append(startfilename)
                Processed_Image_FileList.append(finalfilename)

...在這里,我希望能夠添加一段代碼,其中工作人員從Original_Image_FileList中獲取第一個文件,然后將其壓縮為Processed_Image_FileList中的第一個文件名,第二個之后再獲取一個文件,等等。最多可以有特定數量的工作程序-取決於ini文件中的用戶設置。

有任何想法嗎?

您可以使用Pool類創建一個工作池,您可以將圖像壓縮分發到該工作Pool 請參閱multiprocessing文檔的“ 使用工作人員池”部分。

例如,如果您的壓縮函數稱為compress(filename) ,則可以使用Pool.map方法將此函數應用於返回文件名的可迭代對象,即您的列表matching_directory

from multiprocessing import Pool

def compress_image(image):
  """Define how you'd like to compress `image`..."""
  pass

def distribute_compression(images, pool_size = 4):
  with Pool(processes=pool_size) as pool:
    pool.map(compress_image, images)

有許多類似地圖的方法可用,請參閱地圖以了解入門。 您可能想試驗一下池的大小,以了解最有效的方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM