我有一个很大的XML文件,由Python类打开、加载到内存中,然后关闭。一个简单的示例如下:
class Dictionary():
def __init__(self, filename):
f = open(filename)
self.contents = f.readlines()
f.close()
def getDefinitionForWord(self, word):
# returns a word, using etree parser
在我的Flask应用程序中:
from dictionary import Dictionary
dictionary = Dictionary('dictionary.xml')
print 'dictionary object created'
@app.route('/')
def home():
word = dictionary.getDefinitionForWord('help')
我知道在理想情况下,我应该使用数据库代替XML,并在每个请求上与此数据库建立新连接。
根据文档,我了解到Flask中的应用程序上下文意味着每个请求都会重新创建“dictionary = new Dictionary(' dictionary.xml')”,因此会打开磁盘上的文件并将整个内容重新读入内存。然而,当我查看调试输出时,我看到“dictionary object created”一行仅打印一次,尽管从多个源(不同会话?)连接。
我的第一个问题是:
由于似乎我的应用程序只加载XML文件一次......那么我可以假设它全局驻留在内存中,并且可以被大量同时请求安全地读取,仅受服务器RAM限制-对吗?如果XML为50MB,则需要大约50MB的内存,并可快速提供给同时请求......我猜这并不容易。
我的第二个问题是:
如果不是这种情况,我将遇到哪些处理大量流量的限制?如果重复打开,从磁盘读取和关闭50MB XML,我假定一次只能处理一个请求。
我意识到这很模糊,也依赖于硬件,但我是Flask、python和网络编程的新手,只是寻求指导。
谢谢!