Para un proyecto de django, me gusta ejecutar el índice actualizado por un trabajador de apio para no llegar al tiempo de análisis de la página. Noté que celery-haystack puede hacer esto, pero me pregunto por qué es tan complicado. Una solución mucho más sencilla sería simplemente aplicar una tarea asíncrona desde una señal post_save e invocar el procesador de señales desde allí, de modo que no se aplique la parte asíncrona desde dentro del procesador de señales sino antes.
¿Supongo que me estoy perdiendo algo?
Soy consciente de que es posible que ya no existan instancias en caso de señales de eliminación...
Entonces, el apio es solo el distribuidor de tareas, ¿verdad? Y la indexación son trabajos por hacer. La búsqueda es el resultado final. Cuando su recurso es limitado, las tareas se pondrán en cola y se programarán para ejecutarse. Hay trabajadores disponibles. Puede seguir su enfoque sin problemas, pero Celery optimizará al delegar tareas a diferentes trabajadores, que pueden residir en otras máquinas.
Me olvidé de los detalles... (lo siento). Pero para comentar: terminé sin usar celery-haystack, sino que usé señales de django (no solo post_save, sino que creé señales personalizadas más específicas) que activan tareas de apio asíncronas (así que delega a otras colas/nodos) y estas ejecutan la actualización del índice usando el procesador de señales. También amplié el procesador de señales para admitir la actualización y eliminación de objetos individuales y la iteración de objetos. Pablo