背景:在服務器方面,我是一個完整的初學者,但我知道用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