Pergunta

Helllo, Eu gostaria de compartilhar pequenas quantidades de dados (<1K) entre python e processos. Os dados são física PC / 104 IO dados que muda rapidamente e muitas vezes (24x7x365). Haverá um único "servidor" de gravar os dados e vários clientes de leitura porções dela. O sistema esta será executado em usos memória flash (cartão CF), em vez de um disco rígido, por isso estou preocupado com desgaste a memória flash com um esquema baseado em arquivo. Eu também gosto de usar menos energia (tempo do processador) como estamos 100% movido a energia solar.

Obrigado

UPDATE: Nós abrandou a taxa de actualização de dados máxima a cerca de 10 Hz, mas mais tipicamente de 1 Hz. Clientes só será notificado quando um valor muda em vez da uma taxa constante atualização. Temos ido a um modelo de vários servidores / múltiplos clientes, onde cada servidor é especializada em um determinado tipo de instrumento ou função. Desde descobriu-se que a maior parte da programação ia ser feito por programadores Java, acabamos usando JSON-RPC sobre TCP. Os servidores wil ser escrito em Java, mas eu ainda espero escrever o cliente principal em Python e estou investigação implementações JSON-RPC.

Foi útil?

Solução

Uma alternativa para escrever os dados para o arquivo no processo do servidor pode ser a escrever diretamente para os processos do cliente:

soquetes de domínio Use UNIX (ou sockets TCP / IP se os clientes são executados em máquinas diferentes) para conectar cada cliente para o servidor, e têm a gravação do servidor para esses soquetes. Dependendo do seu modelo de processamento particular, a escolha de um cliente / socket pode ser feito pelo servidor (por exemplo round-robin) ou pelos clientes de sinalização que eles estão prontos para mais.

Outras dicas

Ao executar em sistemas de flash, verifique se o sistema de arquivos é projetado adequadamente para maximizar a vida útil da memória flash (nivelamento de desgaste). JFFS e, creio eu, outros são agora capazes de fazer isso de forma eficaz. Se você usar esse sistema de uma, você não deve estar muito preocupado sobre o uso do flash, mas certamente se você estiver escrevendo um fluxo constante de dados que você gostaria de evitar fazer isso no flash.

Usando um sistema de arquivos RAM é uma boa idéia. Melhor ainda é evitar sistemas de arquivos completo, se o projeto do sistema vai deixar você. Para o efeito que você menciona POSH. Eu nunca tentei isso, mas nós encontramos Pyro ( "python Remote Objects" ) para ser uma solução elegante e eficaz em alguns casos similares.

E, claro, há o módulo de biblioteca multiprocessing padrão, que tem algumas semelhanças em termos de como ele se comunica entre processos. Eu começaria lá para qualquer novo desenvolvimento nesta área, e ir para outro lugar apenas se ele não conseguiu pan out.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top