Глобальная переменная на сервере Python

. Исходная информация :Я совсем новичок, когда дело доходит до серверов, но я хорошо разбираюсь в программировании на Python.

Я пытаюсь настроить простой сервер, используя базовые модули Python 2.7 (SimpleHTTPServer, CGIHTTPServer и т. д. ). Этот сервер должен загрузить глобальную переменную только для чтения -с несколькими ГБ данных из файла при запуске; затем, когда каждый пользователь получает доступ к странице, сервер использует большие данные для создания некоторого вывода, который затем передается пользователю.

Для примера предположим, что у меня есть файл размером 4 ГБ 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 ГБ.

Как сделать из этого эффективный процесс, в котором переменная name_listсоздается как глобальная сразу же при запуске сервера, и каждый доступ считывается только из этой переменной?

7
задан HerrKaputt 6 August 2012 в 14:51
поделиться