您的位置:首页 > 运维架构 > Linux

(centos)Django下jpype使用小记

2011-11-25 13:09 295 查看
刚开始的时候,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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: