背景:在服务器方面,我是一个完整的初学者,但我知道用Python编程的方式。Python服务器中的全局变量
我想安装使用基本的Python 2.7模块(SimpleHTTPServer,CGIHTTPServer等),一个简单的服务器。该服务器在启动时需要从文件加载全局只读变量,其中包含几GB的数据;然后,当每个用户访问该页面时,服务器使用大数据来生成一些输出,然后将该输出提供给用户。
例如起见,假设我有一个4 GB的文件names.txt
其中包含英语的所有可能的专有名词:
Jack
John
Allison
Richard
...
让我们假设我的目标是读名称的整个列表到内存,然后从这个大名单中随机选择一个名字。我目前能够使用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
在服务器启动时立即创建为全局变量,并且每个访问只能从该变量读取?
感谢您的回答。数据库在我要学习的东西列表中,但它似乎完全是为了这个需要而矫枉过正。 – HerrKaputt 2012-08-06 14:38:20
好吧,我可能会尝试生成一个随机数字,只读取文件的那一行。这样你不必循环遍历每一行。 – edhedges 2012-08-06 14:42:17
这将适用于这个简单的例子。然而,它不适用于我想要的应用程序,它确实需要将整个文件读入内存。显然,这种误解不是你的错。我将编辑原始问题以反映这一点。 – HerrKaputt 2012-08-06 14:49:20