與標題一樣,當使用multiprocessing
時,我正在努力解決內存泄漏問題。我知道這個問題之前曾被問過,但我仍然無法爲我的問題找到正確的解決方案。使用多處理時的內存泄漏
我有一個RGB圖像列表(共30.000
)。我需要閱讀每幅圖像,處理所有的三個RGB通道,然後保存在內存中的結果(稍後保存在1
大文件)
我試圖用這樣的:
import multiprocessing as mp
import random
import numpy as np
# Define an output queue to store result
output = mp.Queue()
# define a example function
def read_and_process_image(id, output):
result = np.random.randint(256, size=(100, 100, 3)) #fake an image
output.put(result)
# Setup a list of processes that we want to run
processes = [mp.Process(target=read_and_process_image, args=(id, output)) for id in range(30000)]
# Run processes
for p in processes:
p.start()
# # Exit the completed processes
# for p in processes:
# p.join()
# Get process results from the output queue
results = [output.get() for p in processes]
print(results)
此代碼使用大量內存。 This answer解釋了這個問題,但我找不到將其應用於我的代碼的方式。任何建議?謝謝!
編輯:我也嘗試joblib
和Pool
類,但像我預期的代碼將無法使用所有的內核(我看到使用正常for
循環與這兩個病例之間沒有區別)
您不想啓動30000個進程。使用一個池來限制你產生的進程的數量。 –
如何使用池來限制進程的數量(但使用我的CPU的所有內核)?我試過了,但是代碼沒有按照我的意願使用所有的CPU。 @ReutSharabani – trminh89