2012-03-05 10 views
7

Quiero compartir pequeñas piezas de información entre mis nodos de trabajadores (por ejemplo, tokens de autorización en caché, estadísticas, ...) en apio.Comparta áreas de memoria entre trabajadores de apio en una máquina

Si creo un archivo global dentro de mi archivo de tareas, es único por trabajador (Mis trabajadores son procesos y tienen una vida de 1 tarea/ejecución).

¿Cuál es la mejor práctica? ¿Debo guardar el estado externamente (DB), crear una memoria compartida pasada de moda (podría ser difícil debido a las diferentes implementaciones de grupo en el apio)?

¡Gracias de antemano!

+1

¿Qué hay de la memoria caché como memcached, o tiendas clave-valor como Redis? – demalexx

+0

Eso sería una manera, pero esperaba poder encontrar una forma sin una dependencia adicional. – Gregor

+0

Es una pequeña dependencia pero resolverá algunos problemas que puede encontrar implementando la propia comunicación entre procesos. – demalexx

Respuesta

7

finalmente encontrado una buena solución - núcleo pitón multiprocesamiento-Manager:

from multiprocessing import Manager 
manag = Manager() 
serviceLock = manag.Lock() 
serviceStatusDict = manag.dict() 

Este dict se puede acceder desde todos los procesos, es sincronizado, pero usted tiene que utilizar un bloqueo al acceder simultáneamente (como en cada otra implementación de memoria compartida).

+0

Hola, Gregor, estaría encantado de tener tu opinión sobre este tema al que me enfrento: http://stackoverflow.com/questions/26088868/asynchronous-task-queue-processing-of-in-memory-data- stucture-in-django ¿Cree que su solución sería adecuada para mi problema allí? Muchas gracias – cyberjoac

+0

Hola, cyberjoac, en general, esto podría funcionar, pero tienes que probar si Django y Apio viven en el mismo grupo de proceso (cosa que dudo). Avíseme si funciona, ¡estoy interesado! – Gregor

+1

¿Dónde inicia este Gerente? –

Cuestiones relacionadas