2010-03-23 16 views
8

Tengo bastante estándar Django + Rabbitmq + configuración de apio con 1 tarea de apio y 5 trabajadores.Objeto accesible a nivel mundial en todos los trabajadores de Apio/caché de memoria en Django

La tarea carga el mismo archivo grande (simplifico un poco) grande (~ 100MB) asincrónicamente a un número de PC remotas.

Todo funciona bien a expensas de utilizar mucha memoria, ya que cada tarea/trabajador carga ese gran archivo en la memoria por separado.

Lo que me gustaría hacer es tener algún tipo de caché, accesible para todas las tareas, es decir, cargar el archivo una sola vez. El caché de Django basado en locmem sería perfecto, pero como la documentación dice: "cada proceso tendrá su propia instancia de caché privada" y necesito que todos los trabajadores tengan acceso a esta caché.

Intentado jugar con las señales de Aplery como se describe en #2129820, pero eso no es lo que necesito.

Así que la pregunta es: ¿hay alguna manera de definir algo global en Celery (como una clase basada en dict, donde podría cargar el archivo o smth). ¿O hay un truco de Django que podría usar en esta situación?

Gracias.

Respuesta

1

Me parece que lo que necesita es un respaldo de memcached para django. De esta forma, cada tarea en Apio tendrá acceso a ella.

+0

Lo pensé, sin embargo, el mayor valor que se puede almacenar en memcached es 1 MB. –

+0

¿Por qué no particionar el archivo? Y si cada tarea requiere acceso a cada bit de este archivo, entonces no hay forma de evitar cargarlo cada vez. –

+0

Bueno, espero que sea posible :). Las particiones aumentarían la complejidad y creo que debería haber una forma sencilla de abordar esto. –

0

Quizás pueda usar hilos en lugar de procesos para esta tarea en particular. Como todos los subprocesos comparten la misma memoria, solo necesita una copia de los datos en la memoria, pero aún obtiene la ejecución paralela. (esto significa no usar Apio para esta tarea)

2

¿Por qué no simplemente transmitir la (s) carga (s) del disco en lugar de cargar todo el archivo en la memoria?

+0

+1 para una sugerencia correcta. – knutin

Cuestiones relacionadas