python:如何拥有一个可以从所有应用程序访问的字典

时间:2012-06-13 11:28:11

标签: python google-app-engine python-2.7

我是Python新手,现在已经研究了3个月的基础知识,学习类型,功能和算法。现在我开始用GAE框架实现web应用程序开发。

目标:拥有一个非常大的字典,可以从整个网络应用中的所有.py文件进行访问,而不会在每次有人访问应用的网址时多次存储或重新创建。

我想将一个简单的数据库表格渲染到字典中,希望速度增加,因为它会在内存中。

此外,我正计划在内存中创建DAWG - TRIE

我不希望每次调用页面时都会创建这个字典,我希望它存储在内存中一次,保存在那里并由所有会话使用和访问,如果可能的话也会被修改。

我怎样才能做到这一点?就像一个简单的内存数据库,但实际上是一个Python字典?

谢谢。

3 个答案:

答案 0 :(得分:7)

使用memcache。您可以在memcache中存储pickled dict,但您也可以直接将键/值存储在memcache中。编写一个包装类,确保从数据存储中加载值(如果它们尚未存在于内存缓存中)。

甚至更好,只需使用ndb,它会自动为memcache缓存值。这样您只需查询数据存储中的值,ndb将自动为您缓存值(跨多个请求)。

答案 1 :(得分:0)

我将对此进行一次尝试并提出标准的python shelve模块。这提供了一个由dbm文件支持的简单持久字典。

有一些警告特别与并发有关。如果启用 writeback ,它确实提供了一些缓存,但同样可能存在内存消耗问题。另一个限制是键必须是字符串。

不过,这可能值得一看。它绝对符合“纯Python黑客”的描述。

简单示例:

import shelve

d = shelve.open('my_shelf')
for i in range(100000):
    d[str(i)] = 'Item %s' % i
d.close()
d = shelve.open('my_shelf')
>>> d['50000']
'Item 50000'

答案 2 :(得分:-2)

这是不可能的(没有外部服务)。为此存储数据库以存储超过一个请求的数据。你可以做的是保护用户会话中的字典,但我不建议这样做。除非你有数百万条目,否则每个数据库都足够快,甚至是sqlite。