Salvando e recuperando valores de variáveis entre execuções
Eu tenho um módulo Python que está operando como um servidor para um computador portátil sem fio. Toda vez que o portátil envia uma mensagem ao servidor, o módulo determina que tipo de mensagem é e, em seguida, monta uma resposta apropriada. Como as respostas geralmente dependem do estado, estou usando variáveis globais quando necessário para reter / compartilhar informações entre as funções individuais que lidam com cada tipo de mensagem.
O problema que estou tendo é quando o aplicativo é fechado (por qualquer motivo), os valores das variáveis globais são (obviamente) perdidos, portanto, ao relançar o aplicativo, ele não está sincronizado com o handheld. Eu preciso de uma maneira confiável para armazenar esses valores para recuperação.
A direção que eu tenho feito até agora (mas ainda não consegui que funcione) é escrever os nomes das variáveis e seus valores em um arquivo CSV no disco, toda vez que eles são atualizados - e então (quando o aplicativo é lançado), procure esse arquivo e use-o para atribuir as variáveis aos seus estados anteriores. Não tenho problemas para gravar ou ler o arquivo, mas, por algum motivo, os valores não estão sendo atribuídos.
Eu posso postar o código para comentários / ajuda, mas antes disso eu queria descobrir se eu estava indo em uma direção completamente errada em primeiro lugar. Existe uma maneira melhor (ou pelo menos preferível) de salvar e recuperar esses valores?
obrigado, JDM
====
Seguindo. Pode ser um pouco klunky, mas aqui está o que eu tenho e está funcionando. Os únicos globais que me interessam são os que começam com "CUR_". Eu tive que usartempDict1
porque o intérprete não parece gostar de iterar diretamente sobreglobals()
.
import pickle CUR_GLO1 = 'valglo1' CUR_GLO2 = 'valglo2' CUR_GLO3 = 'valglo3' def saveGlobs(): tempDict1 = globals().copy() tempDict2 = {} for key in tempDict1: if (key[:4]=='CUR_'):tempDict2[key] = tempDict1[key] pickle.dump(tempDict2,open('tempDict.p','wb')) def retrieveGlobs(): tempDict = pickle.load(open('tempDict.p','rb')) globals().update(tempDict)