Una de las funciones de mi vista es un trabajo de procesamiento muy largo y claramente necesita ser manejado de manera diferente. En lugar de hacer que el usuario espere mucho tiempo, sería mejor si pudiera almorzar el trabajo de procesamiento que enviaría los resultados por correo electrónico, y sin esperar la finalización, notifique al usuario que su solicitud se procesa y permita que naveguen. Sé que puedo usar os.fork, pero me preguntaba si existe una "forma correcta" en términos de Django. Tal vez pueda devolver la respuesta HTTP, y que seguir con este trabajo de alguna manera?¿Cómo lanzar una solicitud de trabajo asíncrona en la vista de Django?
Respuesta
¿Por qué no simplemente iniciar un thread para hacer el procesamiento y luego continuar enviando la respuesta?
Existen un par de soluciones para este problema, y la mejor depende un poco de la carga de trabajo.
Si tiene una carga de trabajo ligera, puede usar el enfoque utilizado por django-mailer que define un modelo de "trabajos", guardar nuevos trabajos en la base de datos y cron ejecutar un script independiente cada cierto tiempo para procesar el trabajos almacenados en la base de datos (eliminándolos cuando termine). Puede usar algo como django-chronograph para administrar la programación del trabajo más fácilmente
Si necesita ayuda para entender cómo escribir un script para procesar el trabajo, consulte el artículo de James Bennett Standalone Django Scripts para obtener ayuda.
Si tiene una carga de trabajo muy alta, lo que significa que necesitará más de un servidor para procesar los trabajos, entonces desea utilizar una cola de tareas de distribución real. Hay mucha competencia aquí, así que no puedo detallar todas las opciones, pero una buena para usar con las aplicaciones de Django es celery.
Antes de seleccionar una solución, debe determinar cómo se ejecutará el proceso. Es decir, ¿es el mismo proceso para cada usuario individual, los datos son los mismos y se pueden programar regularmente? o cada usuario solicita algo y los resultados son ligeramente diferentes?
Como ejemplo, si los datos serán los mismos para cada usuario individual y se pueden ejecutar según un programa, podría usar cron.
Ver: http://www.b-list.org/weblog/2007/sep/22/standalone-django-scripts/ o http://docs.djangoproject.com/en/dev/howto/custom-management-commands/
Sin embargo, si las solicitudes serán ad hoc y que necesita algo escalable que puede manejar alta carga y es asíncrona: lo que en realidad se está buscando es un sistema de hacer fila mensaje. Su vista agregará una solicitud a la cola que luego se activará.
Hay algunas opciones para implementar esto en Django Django: servicio de cola es puramente Django & pitón y simple, aunque la última confirmación fue en abril y parece que el proyecto ha sido abandonado. http://code.google.com/p/django-queue-service/
La segunda opción si necesita algo que escala, se distribuye y hace uso de mensajes de código abierto haciendo fila servidores: el apio es lo que necesita
http://ask.github.com/celery/introduction.html http://github.com/ask/celery/tree
Sí, los resultados son totalmente diferentes por solicitud. –
Demiurgo, en ese caso necesita ver con qué frecuencia se solicitará esta vista. Si será mucho, sugiero una solución de cola. De esta forma, se puede solicitar la vista, agregarla a la cola sin que el usuario tenga que esperar a que se complete. – ismail
- 1. cómo enviar una solicitud de URL asíncrona?
- 2. solicitud HTTP asíncrona en ruby
- 3. nsurlconnection solicitud asíncrona
- 4. F # solicitud web asíncrona, manejo de excepciones
- 5. Obtener encabezados HTTP en la solicitud asíncrona de WebClient
- 6. Django, mostrando una vista en otra vista?
- 7. cultura actual de solicitud en una vista
- 8. Prueba de flujos de trabajo en Django
- 9. ¿Cómo recibir la solicitud ajax usando django?
- 10. Cómo simular una solicitud HTTP Post desde una vista django sin una plantilla
- 11. Múltiples aplicaciones de django en una vista
- 12. Cómo usar la solicitud en un ModelForm en Django
- 13. ¿Cómo enviar una solicitud POST usando django?
- 14. lectura matrices multidimensionales de una solicitud POST en Django
- 15. Django tastypie: Programa de recursos diferente en la solicitud detallada como en la solicitud de lista
- 16. Python - Ejemplo de solicitud asíncrona/subprocesada de urllib2 mediante HTTPS
- 17. Cómo cancelar la tarea asíncrona a través de la solicitud web?
- 18. Combinación de varias plantillas de Django en una sola solicitud
- 19. Cómo mostrar un archivo PDF en una vista de Django
- 20. ¿Es posible hacer una consulta de base de datos asíncrona/paralela en una aplicación Django?
- 21. Formularios Django: establezca valores de campo en la vista
- 22. Django jQuery solicitud POST
- 23. Cómo eliminar una carpeta de forma asíncrona
- 24. ¿Cuál es la mejor manera de cancelar una solicitud WCF asíncrona?
- 25. obtener datos de solicitud en Django formulario
- 26. Django: una vista, varias URL?
- 27. Conexión del modelo de solicitud/respuesta HTTP con la cola asíncrona
- 28. cómo lanzar una IOException?
- 29. Django/Python ¿cómo obtener el encabezado completo de la solicitud?
- 30. Django obtener la URL de archivos estáticos en la vista
duplicado: http: // stackoverflow .com/questions/1352678/is-there-any-way-to-make-an-asynchronous-function-call-from-python-django/ –
¡Qué mal, pensé que había buscado muy a fondo! –
No parece que haya una respuesta simple, desafortunadamente. –