背景:私はサーバーに関しては完全な初心者ですが、Pythonでプログラミングする方法を知っています。
基本的なPython2.7モジュール(SimpleHTTPServer、CGIHTTPServerなど)を使用して単純なサーバーをセットアップしようとしています。このサーバーは、起動時にファイルから数GBのデータを含むグローバルな読み取り専用変数をロードする必要があります。次に、各ユーザーがページにアクセスすると、サーバーはビッグデータを使用して出力を生成し、それがユーザーに提供されます。
names.txt
例として、英語のすべての可能な適切な名詞を含む4GBのファイルがあると仮定します。
Jack
John
Allison
Richard
...
私の目標が名前のリスト全体をメモリに読み込んでから、この適切な名詞の大きなリストからランダムに1つの名前を選択することであると仮定しましょう。私は現在、PythonのネイティブCGIHTTPServerモジュールを使用してこれを実現できます。まず、ターミナルから実行して、CGIHTTPServerモジュールを直接実行します。
python -m CGIHTTPServer
次に、誰かがアクセスするwww.example-server.net:8000/foo.py
と、これらの名前の1つがランダムに与えられます。私は次のコードを持っています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
ですか。サーバーが起動するとすぐに変数がグローバルとして作成され、各アクセスはその変数からのみ読み取ります。