Django2.2使用 jpype 时报错

2019-06-01  本文已影响0人  王文强Python

1、我有一个Django项目,里面用到 jpype 调用Java 包(功能:将word转成html文件),前端通过from表单将word文件(.doc后缀) 上传到后端,后台先保存到media文件夹下,然后调用自定义函数WrongInspect()这个函数里面再用到 jpype 组件 。

2、我在Windows上面随便转化几个文件都不会报错,但是上了centos服务器报错。前端第一次post 上传文件时能够正常完成业务逻辑(将word转成html文件),但是第二次post上传文件时就会报错。

3、我在启动JVM时先做了判断防止内存泄漏                                                                                           if not isJVMStarted():                                                                                                startJVM(getDefaultJVMPath(),"-ea","-Djava.class.path=%s" % (jarpath1),"-Xms1g","-Xmx1g")

4、下面是WrongInspect()函数的核心代码:

def WrongInspect(name):

        current_dirname = os.path.dirname(__file__)

        dictPath = os.path.join(current_dirname,'lib')

        jarpath1 =f"{dictPath}/ReadWord.jar"

        if not isJVMStarted():

                startJVM(getDefaultJVMPath(),"-ea","-Djava.class.path=%s" % (jarpath1),"-Xms1g","-Xmx1g")

        HwpfConv = JClass("com.cjsc.poi.HwpfConv")

        hw = HwpfConv()

        # 第一次转化文件格式时没有问题,但第二次转化文件格式时下面这一行代码报错

         hw.Word2003ToHtml(f"{current_dirname}/Wrong", name,".doc")

最后的解决办法是开个多进程就解决了上面的问题,因为整个django项目就是一个进程,每次访问时相当于一个线程进来,线程中关闭JVM但是进程中还是依然开启着,所以创建一个多进程就解决问题了!

上一篇下一篇

猜你喜欢

热点阅读