[pyar] WSGI para Flask en Windows
Luis Andraschnik
luis.andraschnik en gmail.com
Mar Abr 3 22:17:45 -03 2018
Hola
No sé casi nada de Docker, pero pienso que no elimina el fallo , sólo
ocurriría dentro del contenedor, ya que el problema es incompatibilidad del
backend tcl por defecto de matplotlib con un wsgi multi-thread.
Saludos!
Luis
El mar., 3 de abr. de 2018 18:18, Juan Francisco Mosquera <
juan.francisco.mosquera en gmail.com> escribió:
> otra opcion podria ser docker amigo , eso eliminaria muchos problemas.
> creas tu container y abres los puertos a tus usuarios.
>
>
> *Student Master of Science in Computer Science *Juan Francisco Mosquera
> Maharishi University of Management
> 3168101369
> skype:juan.francisco.mosquera
>
>
> El 3 de abril de 2018, 12:31, Luis Andraschnik<luis.andraschnik en gmail.com>
> escribió:
>
>> Solución Final y Reflexiones:
>>
>> Para eliminar la falla era neceario cambiar el backend de matplotlib.
>> Espero que le pueda servir a otros si les aparec un error
>>
>>
>>
>> *Tcl_AsyncDelete: async handler deleted by the wrong thread*
>> Reflexiones finales:
>>
>> 1) Usar Flask con el servidor WSGI de Cherrypy en Windows es muy sencillo
>>
>> 2) Si les aparece el error Tcl_AsyncDelete: async handler deleted by the
>> wrong thread
>> , puede estar ocasionado por matplotlib entonces hay que colocar la
>> siguiente línea *matplotlib.use("agg") INMEDIATAMENTE* después de
>> importar matplotlib y antes de importar cualquier otro módulo de matplotlib
>> como bien lo dice el siguiente warning que me dejó impresionado:
>>
>> $ python launcher_cherry.py
>> C:\Users\lims\AppData\Local\Programs\Python\Python35-32\
>> lib\site-packages\matplotlib\__init__.py:1350: UserWarning: This call
>> to matplotlib.use() has no effect
>> because the backend has already been chosen;
>> matplotlib.use() must be called *before* pylab, matplotlib.pyplot,
>> or matplotlib.backends is imported for the first time.
>>
>> 3) No sé como hacían los programadores del pasado antes de existir google
>>
>> 4) A veces el sólo hecho de postear dispara ideas para solucionar un
>> problema aunque no tengas la respuesta que buscabas!
>>
>> Saludos!
>> Luis
>>
>>
>>
>>
>>
>>
>> El 3 de abril de 2018, 13:49, Luis Andraschnik <
>> luis.andraschnik en gmail.com> escribió:
>>
>>> Parece que el problema está en matplotlib, pero con el servidor de
>>> desarrollo de Flask no tengo problemas.
>>> Matplolib lo uso para generar gráficos que codifico en Base 64 y los
>>> renderizo con html, no debería generar problemas ...
>>>
>>> Mejor pruebo otro WSGI , voy a leer lo de Fast CGi
>>> Saludos!
>>>
>>>
>>>
>>> El 3 de abril de 2018, 13:34, Luis Andraschnik <
>>> luis.andraschnik en gmail.com> escribió:
>>>
>>>> Actualización de último momento: La falla ocurre aunque no haga nada
>>>> prohibido
>>>>
>>>> $ python launcher_cherry.py
>>>> [03/Apr/2018:13:30:30] ENGINE Bus STARTING
>>>> [03/Apr/2018:13:30:30] ENGINE Started monitor thread 'Autoreloader'.
>>>> [03/Apr/2018:13:30:30] ENGINE Started monitor thread '_TimeoutMonitor'.
>>>> [03/Apr/2018:13:30:30] ENGINE Serving on http://0.0.0.0:5000
>>>> [03/Apr/2018:13:30:30] ENGINE Bus STARTED
>>>> 127.0.0.1 - - [03/Apr/2018:13:30:33 -0300] "GET / HTTP/1.1" 200 2660 "
>>>> http://localhost:5000/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64;
>>>> rv:59.0) Gecko/20100101 Firefox/59.0"
>>>> 127.0.0.1 - - [03/Apr/2018:13:30:33 -0300] "GET /static/basic.css
>>>> HTTP/1.1" 200 410 "http://localhost:5000/" "Mozilla/5.0 (Windows NT
>>>> 10.0; Win64; x64; rv:59.0) Gecko/20100101 Firefox/59.0"
>>>> 127.0.0.1 - - [03/Apr/2018:13:30:33 -0300] "GET /static/navbar.css
>>>> HTTP/1.1" 200 566 "http://localhost:5000/" "Mozilla/5.0 (Windows NT
>>>> 10.0; Win64; x64; rv:59.0) Gecko/20100101 Firefox/59.0"
>>>> 127.0.0.1 - - [03/Apr/2018:13:30:34 -0300] "GET /static/fondo.jpg
>>>> HTTP/1.1" 304 - "http://localhost:5000/" "Mozilla/5.0 (Windows NT
>>>> 10.0; Win64; x64; rv:59.0) Gecko/20100101 Firefox/59.0"
>>>> 127.0.0.1 - - [03/Apr/2018:13:30:35 -0300] "GET /gasoil HTTP/1.1" 200
>>>> 11507 "http://localhost:5000/" "Mozilla/5.0 (Windows NT 10.0; Win64;
>>>> x64; rv:59.0) Gecko/20100101 Firefox/59.0"
>>>> 127.0.0.1 - - [03/Apr/2018:13:30:35 -0300] "GET /static/basic.css
>>>> HTTP/1.1" 200 410 "http://localhost:5000/gasoil" "Mozilla/5.0 (Windows
>>>> NT 10.0; Win64; x64; rv:59.0) Gecko/20100101 Firefox/59.0"
>>>> 127.0.0.1 - - [03/Apr/2018:13:30:35 -0300] "GET /static/navbar.css
>>>> HTTP/1.1" 200 566 "http://localhost:5000/gasoil" "Mozilla/5.0 (Windows
>>>> NT 10.0; Win64; x64; rv:59.0) Gecko/20100101 Firefox/59.0"
>>>> 127.0.0.1 - - [03/Apr/2018:13:30:37 -0300] "POST /gasoil HTTP/1.1" 200
>>>> 315115 "http://localhost:5000/gasoil" "Mozilla/5.0 (Windows NT 10.0;
>>>> Win64; x64; rv:59.0) Gecko/20100101 Firefox/59.0"
>>>> 127.0.0.1 - - [03/Apr/2018:13:30:40 -0300] "GET /static/basic.css
>>>> HTTP/1.1" 200 410 "http://localhost:5000/gasoil" "Mozilla/5.0 (Windows
>>>> NT 10.0; Win64; x64; rv:59.0) Gecko/20100101 Firefox/59.0"
>>>> 127.0.0.1 - - [03/Apr/2018:13:30:40 -0300] "GET /static/navbar.css
>>>> HTTP/1.1" 200 566 "http://localhost:5000/gasoil" "Mozilla/5.0 (Windows
>>>> NT 10.0; Win64; x64; rv:59.0) Gecko/20100101 Firefox/59.0"
>>>> 127.0.0.1 - - [03/Apr/2018:13:30:51 -0300] "GET /fueloil HTTP/1.1" 200
>>>> 4809 "http://localhost:5000/gasoil" "Mozilla/5.0 (Windows NT 10.0;
>>>> Win64; x64; rv:59.0) Gecko/20100101 Firefox/59.0"
>>>> 127.0.0.1 - - [03/Apr/2018:13:30:53 -0300] "POST /fueloil HTTP/1.1" 200
>>>> 6252 "http://localhost:5000/fueloil" "Mozilla/5.0 (Windows NT 10.0;
>>>> Win64; x64; rv:59.0) Gecko/20100101 Firefox/59.0"
>>>> 127.0.0.1 - - [03/Apr/2018:13:30:53 -0300] "GET /static/basic.css
>>>> HTTP/1.1" 200 410 "http://localhost:5000/fueloil" "Mozilla/5.0
>>>> (Windows NT 10.0; Win64; x64; rv:59.0) Gecko/20100101 Firefox/59.0"
>>>> 127.0.0.1 - - [03/Apr/2018:13:30:53 -0300] "GET /static/navbar.css
>>>> HTTP/1.1" 200 566 "http://localhost:5000/fueloil" "Mozilla/5.0
>>>> (Windows NT 10.0; Win64; x64; rv:59.0) Gecko/20100101 Firefox/59.0"
>>>> 127.0.0.1 - - [03/Apr/2018:13:30:54 -0300] "POST /fueloil HTTP/1.1" 200
>>>> 6252 "http://localhost:5000/fueloil" "Mozilla/5.0 (Windows NT 10.0;
>>>> Win64; x64; rv:59.0) Gecko/20100101 Firefox/59.0"
>>>> 127.0.0.1 - - [03/Apr/2018:13:30:55 -0300] "POST /fueloil HTTP/1.1" 200
>>>> 6252 "http://localhost:5000/fueloil" "Mozilla/5.0 (Windows NT 10.0;
>>>> Win64; x64; rv:59.0) Gecko/20100101 Firefox/59.0"
>>>> 127.0.0.1 - - [03/Apr/2018:13:30:56 -0300] "POST /fueloil HTTP/1.1" 200
>>>> 6252 "http://localhost:5000/fueloil" "Mozilla/5.0 (Windows NT 10.0;
>>>> Win64; x64; rv:59.0) Gecko/20100101 Firefox/59.0"
>>>> 127.0.0.1 - - [03/Apr/2018:13:30:56 -0300] "POST /fueloil HTTP/1.1" 200
>>>> 6252 "http://localhost:5000/fueloil" "Mozilla/5.0 (Windows NT 10.0;
>>>> Win64; x64; rv:59.0) Gecko/20100101 Firefox/59.0"
>>>> 127.0.0.1 - - [03/Apr/2018:13:30:57 -0300] "POST /fueloil HTTP/1.1" 200
>>>> 6252 "http://localhost:5000/fueloil" "Mozilla/5.0 (Windows NT 10.0;
>>>> Win64; x64; rv:59.0) Gecko/20100101 Firefox/59.0"
>>>>
>>>> *Tcl_AsyncDelete: async handler deleted by the wrong thread*
>>>>
>>>>
>>>> El 3 de abril de 2018, 13:27, Luis Andraschnik <
>>>> luis.andraschnik en gmail.com> escribió:
>>>>
>>>>> Hola Ricardo
>>>>>
>>>>> Ya encargué una Rpi para este uso, mientras tanto quería ver que puedo
>>>>> hacer en Windows. Probé usar el WSGI de Cherrypy, que vuela, pero si
>>>>> introduzco datos que generen una operación prohibida, como logaritmos de
>>>>> números negativos (mi app no está muy pulida), genero un Server internal
>>>>> error que no puede recuperarse. Bajo linux con Gunicorn se la bancaba, así
>>>>> que no sé que tan estable sea Cherrypy wsgi server en Windows:
>>>>>
>>>>> *ValueError: math domain error*
>>>>> 127.0.0.1 - - [03/Apr/2018:13:14:45 -0300] "POST /fueloil HTTP/1.1"
>>>>> 500 291 "http://localhost:5000/fueloil" "Mozilla/5.0 (Windows NT
>>>>> 10.0; Win64; x64; rv:59.0) Gecko/20100101 Firefox/59.0"
>>>>> 127.0.0.1 - - [03/Apr/2018:13:14:48 -0300] "GET / HTTP/1.1" 200 2660 "
>>>>> http://localhost:5000/fueloil" "Mozilla/5.0 (Windows NT 10.0; Win64;
>>>>> x64; rv:59.0)
>>>>>
>>>>>
>>>>> *Tcl_AsyncDelete: async handler deleted by the wrong thread*
>>>>>
>>>>>
>>>>> Usé el siguiente script como lanzador (basado en
>>>>> http://fgimian.github.io/blog/2012/12/08/setting-up-a-rock-
>>>>> solid-python-development-web-server/ )
>>>>>
>>>>> import cherrypy
>>>>>
>>>>> from *my_aplicacion_flask* import app
>>>>> from paste.translogger import TransLogger
>>>>>
>>>>>
>>>>> def run_server():
>>>>> # Enable WSGI access logging via Paste
>>>>> app_logged = TransLogger(app)
>>>>>
>>>>> # Mount the WSGI callable object (app) on the root directory
>>>>> cherrypy.tree.graft(app_logged, '/')
>>>>>
>>>>> # Set the configuration of the web server
>>>>> cherrypy.config.update({
>>>>> 'engine.autoreload_on': True,
>>>>> 'log.screen': True,
>>>>> 'server.socket_port': 5000,
>>>>> 'server.socket_host': '0.0.0.0'
>>>>> })
>>>>>
>>>>> # Start the CherryPy WSGI web server
>>>>> cherrypy.engine.start()
>>>>> cherrypy.engine.block()
>>>>>
>>>>> if __name__ == "__main__":
>>>>> run_server()
>>>>>
>>>>>
>>>>>
>>>>> El 3 de abril de 2018, 13:00, Ricardo Daniel Quiroga <
>>>>> l2radamanthys en gmail.com> escribió:
>>>>>
>>>>>> Lo que te recomiendo es no hacer deploy sobre windows vas a sufrir y
>>>>>> mucho, de ultima consigue una raspberry y que corra ahi. Pero bueno
>>>>>> si sos masoquista [1]
>>>>>>
>>>>>> [1]- https://medium.com/@bilalbayasut/deploying-python-
>>>>>> web-app-flask-in-windows-server-iis-using-fastcgi-6c1873ae0ad8
>>>>>>
>>>>>> El 3 de abril de 2018, 12:52, pedro cabrera <pedrom9632 en gmail.com>
>>>>>> escribió:
>>>>>>
>>>>>>> Buenos dias
>>>>>>>
>>>>>>>
>>>>>>> Te recomiendo Nginx, espero que te sirva para lo que necesitas
>>>>>>>
>>>>>>> El 3 de abril de 2018, 10:46, Luis Andraschnik <
>>>>>>> luis.andraschnik en gmail.com> escribió:
>>>>>>>
>>>>>>>> Buen día Grupo
>>>>>>>>
>>>>>>>> Quise correr una aplicación flask en Windows con Gunicorn y me
>>>>>>>> enteré que no funciona (ni en Cygwin). ¿Qué puedo usar como Python WSGI?
>>>>>>>>
>>>>>>>> Es para correr una app Flask en una red Local, en Windows, algo que
>>>>>>>> sea tan sencillo de implementar como Gunicorn y para no usar el servidor de
>>>>>>>> desarrollo que es muy precario para "producción".
>>>>>>>>
>>>>>>>> Muchas gracias!
>>>>>>>> Luis
>>>>>>>>
>>>>>>>>
>>>>>>>> <https://www.avast.com/sig-email?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=webmail> Libre
>>>>>>>> de virus. www.avast.com
>>>>>>>> <https://www.avast.com/sig-email?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=webmail>
>>>>>>>> <#m_3861243366002773094_m_8047296070565957504_m_5222406119351505010_m_-6140250891213148714_m_1953250168677521534_m_1848759174362256851_m_-1683613568499855731_m_5998710374036844608_m_7228297523808588929_DAB4FAD8-2DD7-40BB-A1B8-4E2AA1F9FDF2>
>>>>>>>>
>>>>>>>> _______________________________________________
>>>>>>>> Lista de Correo de PyAr - Python Argentina - pyar en python.org.ar
>>>>>>>> Sitio web: http://www.python.org.ar/
>>>>>>>>
>>>>>>>> Para administrar la lista (o desuscribirse) entrar a
>>>>>>>> http://listas.python.org.ar/listinfo/pyar
>>>>>>>>
>>>>>>>> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre
>>>>>>>> de Argentina - http://www.usla.org.ar
>>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> _______________________________________________
>>>>>>> Lista de Correo de PyAr - Python Argentina - pyar en python.org.ar
>>>>>>> Sitio web: http://www.python.org.ar/
>>>>>>>
>>>>>>> Para administrar la lista (o desuscribirse) entrar a
>>>>>>> http://listas.python.org.ar/listinfo/pyar
>>>>>>>
>>>>>>> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre
>>>>>>> de Argentina - http://www.usla.org.ar
>>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> --
>>>>>>
>>>>>> Ricardo Daniel Quiroga
>>>>>>
>>>>>>
>>>>>> _______________________________________________
>>>>>> Lista de Correo de PyAr - Python Argentina - pyar en python.org.ar
>>>>>> Sitio web: http://www.python.org.ar/
>>>>>>
>>>>>> Para administrar la lista (o desuscribirse) entrar a
>>>>>> http://listas.python.org.ar/listinfo/pyar
>>>>>>
>>>>>> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre
>>>>>> de Argentina - http://www.usla.org.ar
>>>>>>
>>>>>
>>>>>
>>>>
>>>
>>
>> _______________________________________________
>> Lista de Correo de PyAr - Python Argentina - pyar en python.org.ar
>> Sitio web: http://www.python.org.ar/
>>
>> Para administrar la lista (o desuscribirse) entrar a
>> http://listas.python.org.ar/listinfo/pyar
>>
>> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de
>> Argentina - http://www.usla.org.ar
>>
>
> _______________________________________________
> Lista de Correo de PyAr - Python Argentina - pyar en python.org.ar
> Sitio web: http://www.python.org.ar/
>
> Para administrar la lista (o desuscribirse) entrar a
> http://listas.python.org.ar/listinfo/pyar
>
> 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/20180403/c371d23e/attachment-0001.html>
Más información sobre la lista de distribución pyar