擅长:python、mysql、java
<p>在<a href="http://docs.pylonsproject.org/projects/pyramid/en/latest/narr/configuration.html#configuration-narr" rel="noreferrer">Pyramid application's configuration</a>期间将类的实例添加到全局<a href="http://docs.pylonsproject.org/projects/pyramid/en/latest/api/registry.html" rel="noreferrer">application registry</a>:</p>
<pre><code>config.registry.mycorpus = MyCorpus()
</code></pre>
<p>然后,例如在视图代码中,通过请求访问它:</p>
^{pr2}$
<p>您也可以使用<code>registry.registerUtility</code>将其注册为<a href="http://docs.pylonsproject.org/projects/pyramid/en/latest/narr/zca.html" rel="noreferrer">Zope Component Architecture</a>实用程序,但您需要定义<code>MyCorpus</code>提供的接口等,从长远来看这是一件好事。不管是哪种方式,将singleton实例作为注册表的一部分,都会使测试应用程序更容易;只需使用模拟语料库创建一个配置。在</p>
<p>任何锁定都应该由实例本身处理:</p>
<pre><code>from threading import Lock
class MyCorpus(object):
def __init__(self, Lock=Lock):
self.table = AwesomeDataStructure()
self.lock = Lock()
...
def insert(self):
with self.lock:
self.table.push_back(1)
</code></pre>