基于 Django 1.9 class 的视图单例
Django 1.9 class-based view singleton
Django 中基于 class 的视图存在一个问题,我找不到简单的解决方案。
让我们创建一些基于 class 的视图:
class userspaceDispatcher(View):
def __init__(self,*args, **kwargs):
super().__init__(*args, **kwargs)
self.someSharedStuff = MongoConnector() # As example
def dispatch(self, request, *args, **kwargs):
# Some code here, it does not matter
return dispatchResult
然后,当我们进行 HTTP 调用时,将传递到我的视图,每次都会创建 userspaceDispatcher 的新实例。
例如,要处理请求,我需要 MongoDB 连接器。正如我在探查器上看到的那样,连接器的初始化需要 5-7 毫秒。
所以问题是 - 如何使视图 class 成为单例?不是每次请求都要初始化吗?
这种事情的解决方案与基于 class 的视图和基于函数的视图相同。在模块级别定义视图外的共享值,因此每个进程只会实例化一次。
Django 中基于 class 的视图存在一个问题,我找不到简单的解决方案。
让我们创建一些基于 class 的视图:
class userspaceDispatcher(View):
def __init__(self,*args, **kwargs):
super().__init__(*args, **kwargs)
self.someSharedStuff = MongoConnector() # As example
def dispatch(self, request, *args, **kwargs):
# Some code here, it does not matter
return dispatchResult
然后,当我们进行 HTTP 调用时,将传递到我的视图,每次都会创建 userspaceDispatcher 的新实例。 例如,要处理请求,我需要 MongoDB 连接器。正如我在探查器上看到的那样,连接器的初始化需要 5-7 毫秒。
所以问题是 - 如何使视图 class 成为单例?不是每次请求都要初始化吗?
这种事情的解决方案与基于 class 的视图和基于函数的视图相同。在模块级别定义视图外的共享值,因此每个进程只会实例化一次。