# Copyright 2015 The Chromium Authors. All rights reserved. # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. import threading class WeakConstant(object): """A thread-safe, lazily initialized object. This does not support modification after initialization. The intended constant nature of the object is not enforced, though, hence the "weak". """ def __init__(self, initializer): self._initialized = False self._initializer = initializer self._lock = threading.Lock() self._val = None def read(self): """Get the object, creating it if necessary.""" if self._initialized: return self._val with self._lock: if not self._initialized: self._val = self._initializer() self._initialized = True return self._val