. Исходная информация :Я совсем новичок, когда дело доходит до серверов, но я хорошо разбираюсь в программировании на 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
создается как глобальная сразу же при запуске сервера, и каждый доступ считывается только из этой переменной?