我有一个图像检测器模块,加载大约需要一分钟。我想在服务器启动时实例化它一次,并在 View 中使用它。我知道当服务器从 urls.py
启动时我可以运行代码,因此,我尝试了以下操作:
url.py
from django.contrib import admin
from django.urls import include, path
from module import Module
urlpatterns = [
path('module/', include('project.urls')),
path('admin/', admin.site.urls),
]
module = Module()
View .py
from django.http import HttpResponse
from project.urls import module
def end_point(request):
module.do_stuff()
return HttpResponse("It works!")
这种方法不起作用,因为我无法从此文件导入任何变量。除此之外,如果urls.py
死了,我会得到NameError:name'module'未定义
。我不使用数据库,我只想要我的模块的 REST API。我想使用 Djongo,因为我将在项目的其他服务中使用它。
总结:我想要一个在服务器启动时实例化对象的地方,并且能够在 View 中使用我的对象。
谢谢!
最佳答案
这在使用它的特定应用程序的 models.py
中效果最好。但在开发过程中,这个
# my_app/models.py
import os
mymodule = {'a': 1}
print('id: {} -- pid: {}'.format(id(mymodule), os.getpid()))
将打印出具有两个不同pid
的两行。也就是说,因为在开发过程中,Django 使用第一个进程来实现自动重新加载功能。要禁用该功能,请使用以下命令关闭自动重新加载:./manage.py runserver --noreload
。
现在你可以做到
# my_app/views.py
import os
from django.http import HttpResponse
from .models import mymodule
def home(request):
return HttpResponse('id: {} -- pid: {}'.format(id(mymodule), os.getpid()))
它将为 mymodule
对象打印相同的 pid
和相同的 id
。
关于python - Django:服务器启动时创建对象并在 View 中使用它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51249178/