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



我有一个程序,它迭代给定文件夹中的所有图片并返回一个数值:

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])

因为在分析一张图片后会存储一些不需要的内存,所以我必须使用 多处理模块,可以解决问题并且程序运行良好,但仅当我不使用队列并且仅打印我从分析(dist(中获得的结果时。当我使用队列时,程序只分析两张图片然后停止,但它没有被杀死。 我正在解决这个问题一段时间,真的不知道还能做什么。

"经典"解决方案是在等待队列时超时。在下面的代码块中,我使用了 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}") 

现在,您将能够识别或跳过"坏"文件。总体而言,这是一个更好的设计,因为它还可以减少由于处理函数中的错误而导致程序挂起的可能性。

最新更新