【发布时间】:2018-01-05 18:10:18
【问题描述】:
我正在尝试创建一个由不同线程同时添加的字典。为此,我创建了一个包含字典实例的单例类。为了访问这个字典,我需要一个信号量对象(因为不同线程的传入键值对是不同的),它允许多个线程一次添加到字典中。
我在 python 中的尝试如下:
class recipeDict :
initializationLock = threading.lock()
semaphore = threading.Semaphore(10)
dictInstance = None
def _instance(cls):
if not cls.dictInstance:
with cls.initalizationLock:
if not cls.dictInstance:
dictInstance = dict()
semaphore.acquire()
try:
return dictInstance
finally:
semaphore.release()
如果我的目标是让每个线程(25 个线程)调用 recipeDict 并访问其中包含的字典一段时间(添加到其中),然后释放信号量,这是一个合适的实现吗?
【问题讨论】:
-
为什么要让它成为单例?如果这个对象有用,为什么要拒绝为每个应用程序实例化多个对象?似乎没有任何理由。正如 Sraw 在他的回答中指出的那样,字典访问已经是线程安全的,所以实际上你根本不需要做任何事情。
标签: python multithreading singleton