Django2.2使用 jpype 时报错
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但是进程中还是依然开启着,所以创建一个多进程就解决问题了!