Chr*_*amp 6 python django neural-network server
我们使用 Django 作为提供各种功能的网站的后端,其中包括使用 Tensorflow 的神经网络来回答某些请求。
为此,我们创建了一个AppConfig应用程序配置并将其加载添加到INSTALLED_APPSDjango 的settings.py. 此 AppConfig 在初始化后立即加载神经网络:
设置.py:
INSTALLED_APPS = [
...
'bert_app.apps.BertAppConfig',
]
Run Code Online (Sandbox Code Playgroud)
.../bert_apps/app.py:
class BertAppConfig(AppConfig):
name = 'bert_app'
if 'bert_app.apps.BertAppConfig' in settings.INSTALLED_APPS:
predictor = BertPredictor() #loads the ANN.
Run Code Online (Sandbox Code Playgroud)
现在,虽然它可以正常工作并执行其应有的功能,但现在会为运行的每个命令加载 ANN manage.py。虽然我们当然希望它在您调用时执行manage.py runserver,但我们不希望它运行manage.py migrate,或者manage.py help以及所有其他命令运行。
我通常不确定这是否是为 Django 后端加载 ANN 的正确方法,所以有人有任何提示如何正确执行此操作吗?我可以想象,在启动时加载模型并不是最佳实践,并且我非常愿意接受有关如何正确执行此操作的建议。
然而,除了实际的模型加载之外,还有一些其他代码也需要几秒钟的时间,并且肯定应该在服务器启动后立即执行(依此类推manage.py runserver),但也不是manage.py help(因为它需要几秒钟)秒),那么是否有一些快速修复方法可以告诉 Django 仅执行它runserver而不是其他命令?
我也有类似的问题,通过检查解决了argv。
class SomeAppConfig(AppConfig):
def ready(self, *args, **kwargs):
is_manage_py = any(arg.casefold().endswith("manage.py") for arg in sys.argv)
is_runserver = any(arg.casefold() == "runserver" for arg in sys.argv)
if (is_manage_py and is_runserver) or (not is_manage_py):
init_your_thing_here()
Run Code Online (Sandbox Code Playgroud)
现在更接近这if not is_manage_py部分:在生产中,您使用 uwsgi/uvicorn/... 运行 Web 服务器,它仍然是一个 Web 服务器,只是它不使用manage.py. 最有可能的是,这是你跑步时唯一不带的东西manage.py
使用AppConfig.ready()- 它的目的是:
子类可以重写此方法来执行初始化任务,例如注册信号。一旦注册表被完全填充,它就会被调用。- [django 文档]
要恢复AppConfig正常,请使用:
from django.apps import apps
apps.get_app_config(app_name)
# apps.get_app_configs() # all
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1646 次 |
| 最近记录: |