我有一个小金字塔网络服务。在
我还有一个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。在
我只能创建该类的一个实例(内存限制)。在
所以我需要能够在服务器启动之前实例化这个类。 我的线程应该可以访问它。在
我还需要一些锁定机制(不支持concurrent插入)。在
实现这一目标的最佳方法是什么?在
在Python中,任何全局变量都是在线程之间共享的,所以这一部分非常简单:“。。。只创建该类的一个实例。。。在服务器启动之前。。。线程应该能够访问它“:
完成了!然后从任何地方导入实例并调用类的方法:
^{pr2}$不需要ZCA,纯Python Python:)
(在web服务器进程中保存大型和非常数据库之类的东西的一般方法感觉很可疑,但我希望您知道自己在做什么。我是说-坚持?锁定?在多个进程之间共享数据?Redis、MongoDB和1001其他数据库产品解决了这些问题)
在Pyramid application's configuration期间将类的实例添加到全局application registry:
然后,例如在视图代码中,通过请求访问它:
^{pr2}$您也可以使用
registry.registerUtility
将其注册为Zope Component Architecture实用程序,但您需要定义MyCorpus
提供的接口等,从长远来看这是一件好事。不管是哪种方式,将singleton实例作为注册表的一部分,都会使测试应用程序更容易;只需使用模拟语料库创建一个配置。在任何锁定都应该由实例本身处理:
相关问题 更多 >
编程相关推荐