423baff73b
- Docker bridge 网络隔离(8000 端口封死) - Gunicorn 4 Worker 多进程 - Alembic 数据库迁移基线 - 日志轮转 20m×3 - JWT 密钥 + DB 密码 + CORS 收紧 - 3-2-1 备份链路(NAS + R740-B 冷备) - 连接池 pool_pre_ping + pool_recycle=3600
41 lines
1023 B
Python
41 lines
1023 B
Python
# Copyright (c) 2010-2024 openpyxl
|
|
|
|
import weakref
|
|
|
|
|
|
class Singleton(type):
|
|
"""
|
|
Singleton metaclass
|
|
Based on Python Cookbook 3rd Edition Recipe 9.13
|
|
Only one instance of a class can exist. Does not work with __slots__
|
|
"""
|
|
|
|
def __init__(self, *args, **kw):
|
|
super().__init__(*args, **kw)
|
|
self.__instance = None
|
|
|
|
def __call__(self, *args, **kw):
|
|
if self.__instance is None:
|
|
self.__instance = super().__call__(*args, **kw)
|
|
return self.__instance
|
|
|
|
|
|
class Cached(type):
|
|
"""
|
|
Caching metaclass
|
|
Child classes will only create new instances of themselves if
|
|
one doesn't already exist. Does not work with __slots__
|
|
"""
|
|
|
|
def __init__(self, *args, **kw):
|
|
super().__init__(*args, **kw)
|
|
self.__cache = weakref.WeakValueDictionary()
|
|
|
|
def __call__(self, *args):
|
|
if args in self.__cache:
|
|
return self.__cache[args]
|
|
|
|
obj = super().__call__(*args)
|
|
self.__cache[args] = obj
|
|
return obj
|