多重处理在两次迭代后停止工作

问题描述 投票:0回答:1

我有一个程序遍历给定文件夹中的所有图片并返回一个数值:

    for filename in os.listdir(image_directory):
        if filename.endswith(".jpg") or filename.endswith(".png"):
            if __name__ == '__main__':
                q = Queue()
                p = Process(target=analysis_main, args=(q,os.path.join(image_directory, filename), points_path, 
                              real_points_path,transform_path, inverse_path, lane,))
                p.start()
                dist = q.get()
                p.join()

            data.append([filename, dist])

由于分析完一张照片后会存储一些不需要的内存,因此我必须使用解决这个问题的多处理模块,程序可以正常运行,但是仅当我不使用队列并且仅打印从analysis(dist)获得的结果时。当我使用队列时,该程序仅分析两张图片然后停止,但不会被杀死。我已经解决了一段时间,而且真的不知道该怎么办。

python multiprocessing
1个回答
0
投票

“经典”解决方案是在队列中等待时超时。在下面的代码块中,我使用3秒钟的超时时间-但数字当然可以不同。

from queue import Empty 
for file in ...:

    q = Queue()
    p = Process(target=analysis_main, args=(q, filename, ...))
    p.start()

    try:
        dist = q.get(True, 3)
        p.join()

        data.append([filename, dist])

    except Empty as e:
        print(f"didn't get anything for {filename}") 

现在,您将能够识别或跳过“不良”文件。总体而言,这是一个更好的设计,因为它还减少了由于处理功能中的错误而导致程序挂起的机会。

© www.soinside.com 2019 - 2024. All rights reserved.