[pyar] Demonios y forks en Django

Ramiro Morales cramm0 en gmail.com
Mie Feb 27 08:58:22 ART 2013


Ramiro Morales
On Feb 27, 2013 3:05 AM, "Tio Oscar" <tioscar en gmail.com> wrote:
>
> Parece el titulo de un juego de roll, pero no.
>
> Tengo una aplicación en Django que al recibir una petición puede mandar
muchos emails, para eso hice un pool, ese pool lo descargo con un comando
al manage.py que envía hasta x cantidad de emails, y ese comando lo ejecuto
atravez de un Cron cada 1 minuto.
>
> Ahora, los correos que se mandan para otras funciones (habilitación de
emails, perdidas de contraseña, etc) pasan por este pool, lo que hace que
pueda ser un poco tedioso para el usuario, 1 minuto de espera puede ser
mucho para un usuario que quiere confirmar una cuenta de email.
>
> Ahora se me ocurren 2 cosas:
>
> 1- Un demonio que este permanentemente.
> 2- Un comando que se ejecute por 1 minuto enviando todo lo que puede en
ese tiempo.
>
> Los pros y contras son varias, la segunda me salva de si se cae el
proceso, se que se va a volver a levantar en menos de 1 minuto.

No me queda claro si estas tratando de hacer todo esto en un ciclo
petición/rta. HTTP. Si es así, no te lo recomiendo porque tratar de crear y
manejar procesos desde el código que se ejecuta allí es una lotería
tenirndo en cuenta que el patrón en rl manejo devthreads/procesos es el
webserver y no tenemos control sobre el mismo.

Creo que es una buena oportunidad para el ejercicio de los n ¿porqué? Por
ejemplo porqué envías lotes con una cantidad máxima de emails.

Creo que parte de la solución podría estar en usar o congiar en un MTA (o
más bien un MSA) que desde hace 30 años tienen solucionado el tema de
manejar colas de correo. Le envías todos y él se encarga. Y si se reinicia
el hardware no los pierde. Y los envia cuanto antes. Y si no puede
reintenta. Muy gauchito.

Sobre como hacerle llegar esos mails al MSA es probable que al existir el
mismo puedas enviar los mails dentro del ciclo req/rta. Sin incurrir en
demoras pero también podes usar sistemas de colas para esas tareas. Celery
EA la mas famose pero hay un puñado de opciones.
>
> Por otro lado (esto es otra aplicacion), tengo un sitio que necesita
hacer unas consultas TODO el tiempo y hablamos de cantidades en millones,
asi que aca si o si tengo que hacer un demonio, ahora esas consultas las
podría hacer en paralelo, y como se que usar threads en python no es muy
beneficioso (aparte que lo mejor seria utilizar todos los cores del
servidor) pienzo hacerla con forks.
>
> Se que para esta segunda opción existen cosas como twisted pero me
gustaría usar los modelos y los recursos que tengo ya en Django.
>
> Se que se puede forkear porque el propio manage.py lo hace cuando se
ejecuta el runserver en modo prefork, pero no sé como tendría que encararlo
correctamente, y si se puede hacer demonizable, mejor.
>
> Si alguno me puede dar un aventon se lo agreadecería :-)
>
> --
> Exos ~ Programador, hacker y filósofo
> web: http://blog.exodica.com.ar
> Linked'in: http://www.linkedin.com/in/ogexos
> Twitter: @exos, Indeti.ca: @exos
> Tels: [+54 11] 6385-EXOS (3967) - [+54 9 11] 6133-2442
>
> -----BEGIN GEEK CODE BLOCK-----
> Version: 3.1
> GCS/IT d-- s:++ a- C+++$ UBL+++$ P(-) L+++$ !E--- W+++$ !N !o K-? !w---
!O !M-- V? PS+++@ !PE Y+(++) PGP++ !t--- !5 X++ R(+) tv--? b- DI D-- G
e en h>++ r+++(-) y+++>+++++
> ------END GEEK CODE BLOCK------
> _______________________________________________
> pyar mailing list pyar en python.org.ar
> http://listas.python.org.ar/listinfo/pyar
>
> PyAr - Python Argentina - Sitio web: http://www.python.org.ar/
>
> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de
Argentina - http://www.usla.org.ar
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.python.org.ar/pipermail/pyar/attachments/20130227/ed846ac9/attachment.html>


More information about the pyar mailing list