我有一个小金字塔网络服务.
我还有一个python类,它创建了一个项目和方法的索引,可以快速搜索它们.就像是:
class MyCorpus(object):
    def __init__(self):
        self.table = AwesomeDataStructure()
    def insert(self):
        self.table.push_back(1)
    def find(self, needle):
        return self.table.find(needle)
我想把上面的课程暴露给我的api.
我只能创建该类的一个实例(内存限制).
所以我需要能够在服务器启动之前实例化这个类.我的线程应该能够访问它.
我还需要一些锁定机制(不支持并发插入).
实现这一目标的最佳方法是什么?
在Pyramid应用程序的配置期间,将您的类的实例添加到全局应用程序注册表:
config.registry.mycorpus = MyCorpus()
然后,例如在您的视图代码中,通过请求访问它:
request.registry.mycorpus
您也可以使用Zope Component Architecture将其注册为实用程序registry.registerUtility,但是您需要定义哪个接口MyCorpus提供等等,从长远来看这是一件好事.无论是将单例实例作为注册表的一部分,都可以更轻松地测试应用程序; 只需使用模拟语料库创建配置.
任何锁定都应由实例本身处理:
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)
| 归档时间: | 
 | 
| 查看次数: | 1334 次 | 
| 最近记录: |