paddleocr在uvicorn中多workers部署遇到的问题

这篇具有很好参考价值的文章主要介绍了paddleocr在uvicorn中多workers部署遇到的问题。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在使用fastapi部署ocr服务时,很简单的写了一个ocr的类,然后开调:

model定义如下:

class Model:
    def __init__(self, name, det=True):
        self.name = name
        self.model = PaddleOCR()
        self.det = det

    def prepare_input(self, urls, url_safe=True):
        images = []
#        ....
        return images

    def postprocess(self, rec_res):
        return rec_res

    def __call__(self, batch):
        
        res = []
        if self.det:
            for image in images:
                s = time.time()
                r = self.model.ocr(image)
                # ....
        return res

当使用如下配置时:

uvicorn.run("ocr_server:app",
                host="0.0.0.0",
                port=1),
                reload=False,
                workers=1)

运行都很ok。

然后为了增加并发,workers设置为2,就报了奇奇怪怪的错误:

ModuleNotFoundError: No module named 'paddleocr.tools'; 'paddleocr' is not a package

就纳闷了,why?我的代码哪里出错了?为什么多进程起就这么容易出环境问题?

后来找了chatgpt聊了,它给了个方法,将paddleocr放在函数中导入即可:

class Model:
    def __init__(self, name, det=True):

        self.name = name
        self.model = None
        self.det = det

    def initialize_model(self):
        '''
        必须延迟加载,否则uvicor会导致环境错误
        :return:
        '''
        from paddleocr import PaddleOCR
        if self.model is None:
            self.model = PaddleOCR()

    def prepare_input(self, images):
        return images

    def postprocess(self, rec_res):
        return rec_res

    def __call__(self, batch):
        '''

        :param batch: 每个输入包含一个参数表示是否要做det
        :return:
        '''
        if not self.model:
            self.initialize_model()
        #....

在call函数中延迟加载,此时问题得到解决。

但是问题是解决了,可这为什么呢?chatgpt也没有很好的解释。它给的答案是多进程,其他进程会复制主进程的导入模块状态,包括导包、初始化类(导包也是初始化的一种,所以即使放在init函数里面也会导致报错,只有在某个函数中延迟加载。)会产生一些问题。在运行时的函数中,有自己的上下文,进程间的内容都是隔离的,所以不会出现问题。

但是还是不知道这是为什么?希望有大佬指点一下为什么。

注:上述中用到的python术语简写,如call指代__call__。文章来源地址https://www.toymoban.com/news/detail-684121.html

到了这里,关于paddleocr在uvicorn中多workers部署遇到的问题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 部署Stable diffusion遇到的一个问题解决

    前两天自己在服务器上搞了一下stable diffusion,碰到过一个问题,当时搜了半天没找到好的方法,后来我想了下给解决了,觉得还是来记录一下,如果其他人也正巧遇到的话看到这个可以方便解决,当然,是对于linux环境下来说的,不过我觉得windows应该也一样通用 问题大概是

    2023年04月16日
    浏览(42)
  • ubuntu 22.04部署mininet遇到的问题

            Mininet是由一些虚拟的终端节点(end-hosts)、交换机、路由器连接而成的一个网络仿真器,它采用轻量级的虚拟化技术使得系统可以和真实网络相媲美。它可以很方便地创建一个支持SDN的网络:host就像真实的电脑一样工作,可以使用ssh登录,启动应用程序,程序可

    2024年02月06日
    浏览(36)
  • 使用railway部署Node项目及遇到的问题

    大家好, 今天愚人节, 祝大家节日快乐~ 同时向大家推荐一个非常nice的网站, railway, 它能够 免费部署项目 , 并且 免费的账号 . 一个月有20天使用权限, 如果想要更长的时间, 就需要续费, 但是一个月20天免费, 还是非常的划算的. 大家都可以去试试, 并且还有一个好处, 它的域名是

    2024年02月07日
    浏览(30)
  • 百度paddleocr GPU版部署

    显卡:NVIDIA GeForce RTX 4070,Nvidia驱动程序版本:537.13 Nvidia驱动程序能支持的最高cuda版本:12.2.138 Python:python3.10.11。试过python3.12,安装paddleocr失败,找不到相关模块。 飞桨版本:2.6,操作系统:windows 10,安装方式:pip,计算平台:CUDA12.0(飞桨2.6最高支持CUDA12.0) CUDA工具包

    2024年03月16日
    浏览(51)
  • 部署U-net过程中遇到的问题

    在pycharm中打开U-net的代码包,运行报错:AttributeError: module ‘wandb’ has no attribute ‘init’ 解决办法:因为运行环境是conda pycharm01 首先激活环境,然后安装wandb pip3 install wandb 然后遇到第二个问题: 之前查错挂了梯子,然后我把梯子退出,问题解决。 问题3: 解决办法: 将ba

    2024年02月14日
    浏览(51)
  • 部署本地化stable-diffusion遇到问题,求解

    (stable-diffusion-webui) C:Usersqinchstable-diffusion-webuiwebui-user.bat venv \\\"C:Usersqstable-diffusion-webuivenvScriptsPython.exe\\\" Python 3.10.6 | packaged by conda-forge | (main, Oct 24 2022, 16:02:16) [MSC v.1916 64 bit (AMD64)] Commit hash: 076d624a297532d6e4abebe5807fd7c7504d7a73 Traceback (most recent call last): File \\\"C:Usersqstable-diffu

    2024年02月03日
    浏览(68)
  • 记录部署若依ruoyi到服务器遇到的问题

    1.检查mysql 2.检查redis 3.检查nginx Caused by: io.netty.channel.AbstractChannel$AnnotatedConnectException: 拒绝连接: /192.168.x.x:6379 当遇到redis拒绝连接时,将application.yml 配置文件里的redis的host 配置为localhost,不要配置为服务器的ip地址: 控制台输出:           这个问题大概率是服务器上

    2024年01月16日
    浏览(50)
  • Linux部署Stable Diffusion WebUI以及遇到的问题

    建议配置代理后运行,否则真的很难运行成功 可以参考另一篇文章,在Linux配置Clash代理 报错如下: 解决方法,在webui.sh 文件加上一句,(竟然有效,我也没想到) 解决方法:根据提示信息,提前下好,放到指定文件夹下 详细教程链接: https://ivonblog.com/posts/stable-diffusion-

    2024年02月09日
    浏览(41)
  • stable diffusion 1.5版本windows本地部署遇到的问题

    本人在本地部署时,主要参考了知乎上的这篇文章: Stable Diffusion安装教程(有问题可留言),将自己部署中遇到的问题记录下来,以供参考。 我这里没有使用windows的cmd,用的是Anaconda,因为1.5版本需要Python 3.10.6,而我又不想卸载之前的版本,创建一个conda虚拟环境即可解决

    2024年02月12日
    浏览(65)
  • 离线部署Nginx的安装详细教程+遇到的问题和解决方法

    这篇文章主要就是针对内网部署,不能通过上网的方式下载某些安装软件的依赖包,全程全是通过下载Nginx相关的包,上传到服务器上,最终在服务器上进行解压安装操作。 nginx:http://nginx.org/en/download.html (版本:nginx-1.20.1 tar.gz) pcre:https://sourceforge.net/projects/pcre/files/pcre

    2024年02月12日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包