(centos)Django下jpype使用小记

7 篇文章 0 订阅
4 篇文章 0 订阅
 

刚开始的时候,Python下面使用jpype是完全没有问题的,于是就把jpype写到了Django下面的视图函数里去了,结果一直报错。错误如下:

unsupported operand type(s) for +: 'NoneType' and 'str'

……

Exception Location:

/…/…in _getJVMFromJavaHome, line 55

……

貌似看起来是JVM开不起来,于是搞了好久,配置环境变量啊什么什么的,一直没搞出来。

今天早上过来把原来的代码重新加进去,如下(view.py):

def vvoperate(request, project_id):

    project = shortcuts.get_project_or_404(request, project_id)

    arg1 = request.GET(‘arg_1’)

    jvmpath = getDefaultJVMPath()

    startJVM(jvmpath, "-ea", "-Djava.class.path= VV.jar")

    TA = JPackage('cgl.vbs').VV

    jd = TA()

    vv_ret = jd.VV([arg1])

    shutdownJVM()

   

    return render_to_response('/django_project/index.html',

                              {'region': project.region,

                               'project': project,

                               'vv_return': vv_ret,}

                              , context_instance = template.RequestContext(request))

    return redirect('XXX', project_id)

出现了一个新的错误:

Package cgl.vbs.VV is not Callable

这次这个错误给人感觉有点兴奋了,可以从上面代码中看出,其实getDefaultJVMPath()这个方法肯定是没有问题的了,看来可能是出在startJVM(jvmpath, "-ea", "-Djava.class.path= VV.jar")这条语句上,仔细一看才知道-Djava.class.path=……这里应该加上一个路径的,于是就改成了startJVM(jvmpath, "-ea", "-Djava.class.path= /opt/VV.jar"),再次运行程序,居然没有错误了。哈哈哈

不过我感觉jpype在稳定性上可能还是有问题的,我的源程序是相当于一个可以输入五个参数的函数,就算随便输入参数也可以返回正常值(包括正常错误信息),这是经过了千百次测试过的,但是一开始一旦输入错误参数就报错,但是过一段时间又正常了。不知何故,有待考证。

事实证明jpype是可以用于Django的。

补充一下:后来发现如果加上shutdownJVM()的话,只能执行一次;然后开始报错;我的解决办法是,注释掉shutdownJVM(),然后前面加上 if not isJVMStarted(),这样一来,JVM不关的话就没什么问题了;只不过据说这样会有安全方面的问题,这个有待深入研究;也可以参考下面网址的方法:http://www.elias.cn/Python/JPype?from=Develop.JPype

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值