并行请求在多个深度学习模型的flask应用程序上失败

2024-05-13 02:22:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我的flask应用程序面临内存问题,每次请求后内存都没有释放到操作系统。内存不断积累,最终,它会凝结,程序会耗尽内存

为了解决这个问题,我使用了多重处理,并在一个单独的过程中处理计算

def process_yolact(self, front, side):
        try:
            manager = multiprocessing.Manager()
            return_dict = manager.dict()

            def worker_process(return_dic, front, side):
                front_mask, front = self.obj_yolact.run_yolact(front, 'f')
                side_mask, side = self.obj_yolact.run_yolact(side, 's')
                gc.collect()
                return_dic['1'] = True
                return_dic['2'] = front
                return_dic['3'] = side
                return_dic['4'] = front_mask
                return_dic['5'] = side_mask

            p = Process(target=worker_process, args=(return_dict, front, side))
            p.start()
            p.join()
            return return_dict.values()
        except:
            return False, None, None, None, None
def process_maskrcnn(self, front, side):
        try:
            manager = multiprocessing.Manager()
            return_dict = manager.dict()

            def worker_process(return_dic, front, side):
                frontrcnnmask, frontmask = self.obj_maskrcnn.run_maskrcnn(front, 'f')
                sidercnnmask, sidemask = self.obj_maskrcnn.run_maskrcnn(side, 's')
                gc.collect()
                return_dic['1'] = True
                return_dic['2'] = frontrcnnmask
                return_dic['3'] = sidercnnmask
                return_dic['4'] = frontmask
                return_dic['5'] = sidemask

            p = Process(target=worker_process, args=(return_dict, front, side))
            p.start()
            p.join()
            return return_dict.values()

        except:
            return False, None, None, None, None

我使用进程并在每次请求后结束它们

现在,当我一次发送多个请求时,我会得到很少的输出,而很少的请求没有任何输出

我尝试使用gunicorn处理请求,以便在线程中处理请求,但没有成功。我们怎样才能解决这样的问题

目前,我正在使用waitress为服务器上的应用程序提供服务

这样,一次可以处理多个请求而不会出现任何问题


Tags: 内存selfnonereturndefmanagermaskprocess