py-singleton
Singleton pattern for python 2 & 3.
Install
pip install py-singleton
Test
in the root folder, run pytest:
pytest
Dependencies
None
unit test needs pytest.
API
- Apply class decorator singleton to any class;
- Expected behaviors:
-
class can be instantiated as usual, but only one instance is created;
-
apis to access the class instance:
@singleton class Server(object):pass srv = Server()
or
srv = Server.instace()
-
the function _init_() of decorated class will be called only once when the first instance is created.
-
Example
from py_singleton import singleton
@singleton
class A(object):
count = 0
def __init__(self):
A.count += 1
a1 = A()
a2 = A()
a3 = A.instance()
assert A.count == 1
assert id(a1) == id(a2)
assert id(a1) == id(a3)
Limitation
For best performance, the code to create instance is not thread-safe, however, after the instance is created it should be safe for multi-threading.
It is recommended to call instance() once during the initial phrase of your app in a single thread.