问题描述
我开始使用Python进行多处理,并且试图比较单处理和多处理之间任务执行时间的差异。
程序仅加载一堆图像,对它们执行一些操作并保存。
我正在做相同的事情,第一次是正常的,第二次是使用多处理的:
import cv2
import time
import os
import concurrent.futures
def main():
path = "orig_images/"
img_paths_list = [f"{path}{img_name}" for img_name in os.listdir(path)]
## single processing
print("Single processing")
time_start = time.time()
for img_path in img_paths_list:
result = process_image(img_path)
print(result)
time_end = time.time()
print(f"Finished in {round(time_end - time_start,2)} s")
## multiprocessing
print("Multiprocessing")
time_start = time.time()
results = []
with concurrent.futures.ProcessPoolExecutor() as executor:
results = [executor.submit(process_image,img_path) for img_path in img_paths_list]
for f in concurrent.futures.as_completed(results):
print(f.result())
time_end = time.time()
print(f"Finished in {round(time_end - time_start,2)} s")
def process_image(img_path):
img = cv2.imread(img_path)
img = cv2.GaussianBlur(img,(5,5),0)
img = cv2.resize(img,dsize=(1200,1200))
img_name = os.path.split(img_path)[1]
cv2.imwrite(f"mod_images/{img_name}",img)
result = f"Image {img_name} was processed"
return(result)
if __name__ == "__main__":
main()
现在,我遇到了一个奇怪的问题……任务是第一次完成(单次处理),但随后卡在了多处理部分的开始处,即
print("Multiprocessing")
声明。如果我切换了这两个部分,即我通过多处理运行任务,然后正常进行,则结束时没有任何问题。
我不明白我在做什么。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)