Contesto: Sono un principiante assoluto quando si tratta di server, ma conosco il mio modo di programmare in Python.Variabile globale nel server Python
Sto provando a configurare un server semplice utilizzando i moduli base Python 2.7 (SimpleHTTPServer, CGIHTTerver, ecc.). Questo server deve caricare una variabile globale di sola lettura con diversi GB di dati da un file all'avvio; quindi, quando ogni utente accede alla pagina, il server utilizza i big data per generare un output che viene poi dato all'utente.
Per motivi di esempio, supponiamo Ho un file da 4 GB names.txt
che contiene tutte le possibili nomi propri della lingua inglese:
Jack
John
Allison
Richard
...
Supponiamo che il mio obiettivo è quello di leggere l'intero elenco di nomi in memoria , quindi scegli 1 nome a caso da questa grande lista di nomi propri. Attualmente sono in grado di utilizzare il modulo CGIHTTPServer nativo di Python per realizzare questo. Per iniziare, ho appena eseguito il modulo CGIHTTPServer direttamente, eseguendo da terminale:
python -m CGIHTTPServer
Poi, qualcuno accessi www.example-server.net:8000/foo.py
e si sono date uno di questi nomi a caso. Ho il seguente codice nel 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>"
Questo fa quello che voglio; tuttavia, è estremamente inefficiente, poiché ogni accesso obbliga il server a rileggere un file da 4 GB.
Come posso rendere questo in un processo efficiente, in cui la variabile name_list
viene creata come globale immediatamente all'avvio del server e ogni accesso legge solo da tale variabile?
Grazie per la risposta. I database sono nel mio elenco di cose da imparare, ma sembra un completo overkill solo per questa necessità. – HerrKaputt
Okay allora proverei a generare un numero casuale e leggerò solo quella riga del file. In questo modo non è necessario scorrere ogni riga. – edhedges
Ciò funzionerebbe per questo semplice esempio. Tuttavia, non funzionerebbe per l'applicazione che ho in mente, che richiede veramente la lettura dell'intero file in memoria. Ovviamente, questo malinteso non è colpa tua. Modificherò la domanda originale per riflettere questo. – HerrKaputt