背景:在服务器方面,我是一个完全的初学者,但我知道我的 Python 编程方式。
我正在尝试使用基本的 Python 2.7 模块(SimpleHTTPServer、CGIHTTPServer 等)设置一个简单的服务器。该服务器在启动时需要从一个文件中加载一个包含数 GB 数据的全局只读变量;然后,当每个用户访问该页面时,服务器使用大数据生成一些输出,然后将其提供给用户。
例如,假设我有一个 4 GB 的文件names.txt
,其中包含所有可能的英语专有名词:
Jack
John
Allison
Richard
...
假设我的目标是将整个名称列表读入内存,然后从这个专有名词大列表中随机选择 1 个名称。我目前能够使用 Python 的本机 CGIHTTPServer 模块来完成此任务。首先,我直接运行 CGIHTTPServer 模块,从终端执行:
python -m CGIHTTPServer
然后,有人访问www.example-server.net:8000/foo.py
并随机给他们一个这些名称。我有以下代码foo.py
:
#!/usr/bin/env python
import random
name_list = list()
FILE = open('names.txt','r')
for line in FILE:
name = line[:-1]
name_list.append(name)
FILE.close()
name_to_return = random.choice(name_list)
print "Content-type: text/html"
print
print "<title>Here is your name</title>"
print "<p>" + name_to_return + "</p>"
这就是我想要的;但是,它的效率极低,因为每次访问都会迫使服务器重新读取一个 4 GB 的文件。
我怎样才能使它成为一个有效的过程,其中变量name_list
在服务器启动时立即创建为全局变量,并且每次访问仅从该变量中读取?