启用可在第一次请求前初始化其他Python模块(django+mod_wsgi+apache) [英] enable to initialize other python module before first request (Django + mod_wsgi + apache)

查看:19
本文介绍了启用可在第一次请求前初始化其他Python模块(django+mod_wsgi+apache)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我对Web应用程序非常陌生,最近使用Django+mod_wsgi开发了一个简单的演示系统。 该项目如下所示:

django/
    |- manage.py
    |- mysite/
    |    |- url.py
    |    |- setting.py
    |    |- wsgi.py
    |- myapp/
         |- views.py
         |- taggers.py
         |- ...

这里是myapp.conf配置

WSGIDaemonProcess init python-home=/usr/local/.../3.5.0 python-path=/usr/local/.../django
WSGIProcessGroup init
WSGIImportScript /usr/local/.../django/mysite/wsgi.py process-group=init application-group=%{GLOBAL}
WSGIApplicationGroup %{GLOBAL}
WSGIScriptAlias /myapp /usr/local/.../django/mysite/wsgi.py
<Directory /usr/local/.../django/mysite>
<Files wsgi.py>
Require all granted
</Files>
</Directory>

此演示的功能非常简单。在给定输入的情况下,按下"计算"按钮,使用预加载的机器学习模型计算结果,该模型在views.py的开头加载。加载机器学习模型将涉及到其他Python模块,如skLearning,以及位于同一目录下的一些自制模块,如tagger.py。当我使用‘python3made.py runserver’测试这个演示时,一切都很顺利。Django首先将机器学习模型加载到RAM中,这非常耗时,并等待传入的请求,然后进行计算。

但当我使用mod_wsgi+apache时,我注意到当我启动apache时,只执行wsgi.py。直到第一次通过浏览器访问此演示系统时,才加载机器学习模型(这意味着尚未导入views.py)。即使在第一次请求后一切看起来都很好,我的意思是不需要为每一次计算加载机器学习模型,但我仍然希望在Apache启动后立即自动加载机器学习模型。 我看到有人谈论伪造第一个请求,但我真的很想知道是否有其他解决方案,如修改wsgi.py

总结我的问题。

  1. 我应该如何修改默认的wsgi.py以导入views.py以预加载机器学习模型(直接导入wsgi.py中的views.py将导致类似于‘应用程序未安装’的错误)

  2. 如果我别无选择,只能伪造请求,我应该在哪里以及如何编写它。

非常感谢。

推荐答案

按照丹尼尔在注释中所说的做,将预加载任何数据的代码移动到单独的模块中,并在加载脚本文件时从wsgi.py脚本文件的全局范围中调用它。

您正在使用的配置将在进程启动时预加载wsgi.py。不过,您可以将配置简化为:

WSGIDaemonProcess init python-home=/usr/local/.../3.5.0 python-path=/usr/local/.../django
WSGIScriptAlias /myapp /usr/local/.../django/mysite/wsgi.py process-group=init application-group=%{GLOBAL}
<Directory /usr/local/.../django/mysite>
<Files wsgi.py>
Require all granted
</Files>
</Directory>

WSGIScriptAlias指令上同时具有process-groupapplication-group选项还会在进程启动时触发wsgi.py脚本文件的强制预加载,并且您不需要单独的WSGIImportScript

这篇关于启用可在第一次请求前初始化其他Python模块(django+mod_wsgi+apache)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆