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.
Lo pensé, sin embargo, el mayor valor que se puede almacenar en memcached es 1 MB. –
¿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. –
Bueno, espero que sea posible :). Las particiones aumentarían la complejidad y creo que debería haber una forma sencilla de abordar esto. –