相关疑难解决方法(0)

为什么python模块就像一个单例?

我作为应用程序运行的一部分,从远程数据库创建一个字典.这个过程非常I/O很重,所以我决定创建这个字典的"单例"实例,并在我的应用程序中调用它.

代码看起来像(in Dictionaries.py):

state_code_dict = None

def get_state_code_dict():
    global state_code_dict
    if state_code_dict == None:
        state_code_dict = generate_state_code_dict()
    return state_code_dict
Run Code Online (Sandbox Code Playgroud)

然后我导入并get_state_code_dict()在需要的地方调用函数.我添加了一个print语句来检查是否state_code_dict正在重新初始化或重用,我发现它正在被重用(这是我想要的功能).为什么state_code_dict应用程序中存活的实例会运行?

编辑

get_state_code_dict在多个文件中导入该函数.

python singleton

10
推荐指数
2
解决办法
7420
查看次数

使用文件处理程序进行Python正确记录

我在我的django应用程序中使用python日志记录.如果需要,连接到后端api的类会使用文件处理程序初始化此记录器.每次进行api调用时,类都会被实例化.我已经尝试确保每次都不添加其他处理程序,但是

lsof | grep my.log 
Run Code Online (Sandbox Code Playgroud)

在我的日志文件中显示越来越多的处理程序,一段时间后我的服务器因此打开文件限制而失败.

 self.logger = logging.getLogger("FPA")

        try:
            if self.logger.handlers[0].__class__.__name__=="FileHandler":
                pass
        except Exception, e:
            print 'new filehandler added'+str(e)
            ch = logging.FileHandler(FPA_LOG_TARGET)
            formatter = logging.Formatter("%(asctime)s - %(levelname)s - %(message)s - %(pathname)s @ line %(lineno)d")
            ch.setFormatter(formatter)
            self.logger.setLevel(logging.DEBUG)
            self.logger.addHandler(ch)
Run Code Online (Sandbox Code Playgroud)

我意识到这可能不是最好的方法,但到目前为止我还没有在我的实现中发现错误.

python django logging filehandler

5
推荐指数
1
解决办法
1309
查看次数

标签 统计

python ×2

django ×1

filehandler ×1

logging ×1

singleton ×1