O que você está sugerindo não é diretamente viável. Como novos processos podem ser ativados e desativados fora do seu controle, não há como manter os dados nativos do Python na memória.
No entanto, existem algumas maneiras de contornar isso.
Muitas vezes, um nível de armazenamento de valor-chave é tudo o que você precisa. E às vezes, ter buffers de tamanho fixo para valores (que você pode usar diretamente como
str
/bytes
/bytearray
objetos; qualquer outra coisa que você precise struct
lá ou serializar) é tudo que você precisa. Nesse caso, a estrutura de cache integrada do uWSGI cuidará de tudo o que você precisa. Se você precisar de um controle mais preciso, veja como o cache é implementado em
SharedArea
e fazer algo personalizado. No entanto, eu não recomendaria isso. Ele basicamente oferece o mesmo tipo de API que você obtém com um arquivo, e as únicas vantagens reais sobre apenas usar um arquivo são que o servidor gerenciará a vida útil do arquivo; funciona em todos os idiomas suportados pelo uWSGI, mesmo aqueles que não permitem arquivos; e torna mais fácil migrar seu cache personalizado para um cache distribuído (vários computadores) se você precisar posteriormente. Acho que nenhum deles é relevante para você. Outra maneira de obter armazenamento de valor-chave simples, mas sem os buffers de tamanho fixo, é com o stdlib
anydbm
do Python . A pesquisa de valor-chave é tão pythonic quanto possível:parece um dict
, exceto que é feito backup em um banco de dados BDB em disco (ou similar), armazenado em cache conforme apropriado na memória, em vez de ser armazenado em uma tabela de hash na memória. Se você precisar lidar com alguns outros tipos simples, qualquer coisa que seja incrivelmente rápida para descompactar, como
int
s—você pode querer considerar shelve
. Se sua estrutura for rígida o suficiente, você pode usar o banco de dados de valores-chave para o nível superior, mas acessar os valores por meio de um
ctypes.Structure
, ou deserialize com struct
. Mas geralmente, se você pode fazer isso, você também pode eliminar o nível superior, quando tudo é apenas uma grande Structure
ou Array
. Nesse ponto, você pode simplesmente usar um arquivo simples para armazenamento—ou
mmap
it (para ctypes
), ou apenas open
e read
ele (para struct
). Ou use
multiprocessing
's compartilhados ctypes
Objetos para acessar sua Structure
diretamente de uma área de memória compartilhada. Enquanto isso, se você não precisar de todos os dados de cache o tempo todo, apenas pedaços de vez em quando, é exatamente para isso que servem os bancos de dados. Novamente,
anydbm
, etc. pode ser tudo o que você precisa, mas se você tiver uma estrutura complexa, desenhe um diagrama ER, transforme-o em um conjunto de tabelas e use algo como o MySQL.