Skip to content

Commit 522f759

Browse files
committed
refactor: Remove tedious singleton decorator
1 parent 40c7f3e commit 522f759

File tree

4 files changed

+19
-21
lines changed

4 files changed

+19
-21
lines changed

configs/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
from .config import singleton_variable, Config, CPUConfig
1+
from .config import Singleton, Config, CPUConfig

configs/config.py

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -22,18 +22,16 @@
2222
]
2323

2424

25-
def singleton_variable(func):
26-
def wrapper(*args, **kwargs):
27-
if wrapper.instance is None:
28-
wrapper.instance = func(*args, **kwargs)
29-
return wrapper.instance
25+
class Singleton(type):
26+
_instances = {}
3027

31-
wrapper.instance = None
32-
return wrapper
28+
def __call__(cls, *args, **kwargs):
29+
if cls not in cls._instances:
30+
cls._instances[cls] = super(Singleton, cls).__call__(*args, **kwargs)
31+
return cls._instances[cls]
3332

3433

35-
@singleton_variable
36-
class Config:
34+
class Config(metaclass=Singleton):
3735
def __init__(self):
3836
self.device = "cuda:0"
3937
self.is_half = True
@@ -233,8 +231,7 @@ def device_config(self):
233231
return x_pad, x_query, x_center, x_max
234232

235233

236-
@singleton_variable
237-
class CPUConfig:
234+
class CPUConfig(metaclass=Singleton):
238235
def __init__(self):
239236
self.device = "cpu"
240237
self.is_half = False

i18n/i18n.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import json
22
import locale
33
import os
4-
from configs import singleton_variable
4+
from configs import Singleton
55

66

77
def load_language_list(language):
@@ -10,8 +10,7 @@ def load_language_list(language):
1010
return language_list
1111

1212

13-
@singleton_variable
14-
class I18nAuto:
13+
class I18nAuto(metaclass=Singleton):
1514
def __init__(self, language=None):
1615
if language in ["Auto", None]:
1716
language = locale.getdefaultlocale(

infer/modules/vc/hash.py

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,12 @@
22
import torch
33
import hashlib
44
import pathlib
5+
6+
from functools import lru_cache
57
from scipy.fft import fft
68
from pybase16384 import encode_to_string, decode_from_string
79

8-
from configs import CPUConfig, singleton_variable
10+
from configs import CPUConfig
911
from rvc.synthesizer import get_synthesizer
1012

1113
from .pipeline import Pipeline
@@ -29,27 +31,27 @@ def __exit__(self, type, value, traceback):
2931
expand_factor = 65536 * 8
3032

3133

32-
@singleton_variable
34+
@lru_cache(None) # None 表示无限缓存
3335
def original_audio_storage():
3436
return np.load(pathlib.Path(__file__).parent / "lgdsng.npz")
3537

3638

37-
@singleton_variable
39+
@lru_cache(None)
3840
def original_audio():
3941
return original_audio_storage()["a"]
4042

4143

42-
@singleton_variable
44+
@lru_cache(None)
4345
def original_audio_time_minus():
4446
return original_audio_storage()["t"]
4547

4648

47-
@singleton_variable
49+
@lru_cache(None)
4850
def original_audio_freq_minus():
4951
return original_audio_storage()["f"]
5052

5153

52-
@singleton_variable
54+
@lru_cache(None)
5355
def original_rmvpe_f0():
5456
x = original_audio_storage()
5557
return x["pitch"], x["pitchf"]

0 commit comments

Comments
 (0)