【发布时间】:2011-08-22 01:11:43
【问题描述】:
我的 django 应用程序在 apache+wsgi 上运行。我的 django 应用程序中的一个模块需要通过 jpype 加载 Java 库,并且由于其应用程序性质,这个 Java 库需要很长时间来初始化。
问题在于,对于 django 在 apache+wsgi 设置中处理的每个 http 请求,都会重新加载这个 Java 库。但是,当我在开发 Web 服务器(python manager.py runserver 8000)中运行我的同一个应用程序时,这不会发生。在开发 Web 服务器中,它只加载 Java 库一次。
有什么方法可以更改 apache 或 mod_wsgi 配置或我的 django 应用程序,使其不会为每个 http 请求重新加载我的 Java 库?
非常感谢。
安迪
【问题讨论】:
-
在您的项目/应用程序的哪个部分加载了库?项目设置?在特定于应用的文件中?
-
该库已加载到我的应用程序特定文件之一中。该文件包含一个类静态方法来加载 java 库(如果尚未加载)。
-
问题在于,当在生产环境中使用 Django 时,可能会多次导入特定于应用程序的文件,因此您对 Java 库的调用将不止一次。在初始化 Java VM 之前,我对 PyLucene 有同样的问题。一个好的解决方案是在您的 settings.py 中加载该库(每个 wsgi 线程应该只导入一次),然后在您的应用程序中引用它。
-
当我尝试这个时,jpype 崩溃了。文件“/Library/Python/2.6/site-packages/jpype/_core.py”,第 44 行,在 startJVM _jpype.startup(jvm, tuple(args), True) RuntimeError: Unable to start JVM at src/native/common /jp_env.cpp:54 位置 0x8 的内存访问无效 rip=0x10168aed0
-
那我想我没有适合你的解决方案。对于我的 lucene 安装,这种方法有效。不过,我并不是真正的 Java 人,如果可能的话,尽量避免使用其他语言的库。祝你好运找到解决方案。
标签: python django apache wsgi django-wsgi