gpt4 book ai didi

Django:每个请求单例?

转载 作者:行者123 更新时间:2023-12-02 06:36:56 25 4
gpt4 key购买 nike

我们有一个围绕泡沫(SOAP)请求的包装器,我们在整个应用程序中使用它:

from app.wrapper import ByDesign
bd = ByDesign()

不幸的是,这个实例化是在每个请求的几个点上进行的,导致 suds 重新下载 WSDL 文件,我认为我们可以通过使 bd = ByDesign() 返回一个单例来节省一些时间。

由于 suds 不是线程安全的,因此它必须是每个请求的单例。

唯一的问题是,我想这样做,这样我就不必更改除 app.wrapper.ByDesign 类之外的任何代码,这样我就不必更改调用它的任何代码。如果没有“每个请求一个”的要求,我会这样做:

class ByDesignRenamed(object):
pass

_BD_INSTANCE = None
def ByDesign():
global _BD_INSTANCE
if not _BD_INSTANCE:
_BD_INSTANCE = ByDesignRenamed()
return _BD_INSTANCE

但是,这在线程服务器环境中不起作用。对我有什么想法吗?

最佳答案

查看 threading.local(),它介于纯粹的邪恶和让事情顺利进行的唯一方法之间。大概应该是这样的:

import threading

_local = threading.local()

def ByDesign():
if 'bd' not in _local.__dict__:
_local.bd = ByDesignRenamed()
return _local.bd

进一步阅读:

关于Django:每个请求单例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6234004/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com