[pyar] Threads en tornado

Bruno Geninatti brunogeninatti en gmail.com
Jue Jun 4 10:59:14 ART 2015


 Entiendo.  El tema es que zmq es usado por una librería que se comunica
via puerto serie con algun hardware. En algún momento había consultado
sobre como utilizar este recurso dentro de la aplicación web y me
comentaron que no era conveniente tener la instancia que se utiliza el
puerto serie dentro de la aplicación wsgi. Por eso es que surgió lo de
utilizar zmq.

Pero creo que esto que me mandas de eventloops es justamente lo que
necesito.

Muchas gracias

El 3 de junio de 2015, 11:47, Nahuel Defosse <nahuel.defosse en gmail.com>
escribió:

> Hola Bruno,
>
> hace falta que sea ZMQ? Podes hacer un recuso dónde un POST sobre una URL
> publique a todas las instancias de WebsocketHanlder.
> ZMQ está muy bueno, pero deberías encontrar una forma asincrónica de hacer
> la tarea https://zeromq.github.io/pyzmq/eventloop.html
>
> Usá threads como último recurso (librerías de 3ros, cosas en lenguajes
> foráneos, etc).
>
> Saludos!
>
>
>
> El 3/6/2015, a las 9:58 a.m., Bruno Geninatti <brunogeninatti en gmail.com>
> escribió:
>
> Buenos días bella comunidad. Estoy probando unas cosas con tornado y
> algunos recursos externos, a los que se accede via zmq.
>
> La idea es que haya un websocket que envíe un mensaje proveniente del
> recurso externo. Con lo cual los clientes sólo actuarían "pasivamente", ya
> que no mandarían mensajes via el websocket, sólo recibirían las
> actualizaciones.
>
> Se me ocurrió algo así.
>
> import zmq
> from tornado.httpserver import HTTPServer
> from tornado.ioloop import IOLoop
> from tornado.web import Application
> from tornado import websocket
> from threading import Thread
>
>
> class SocketHandler(websocket.WebSocketHandler):
>     listeners = []
>     def open(self, *args, **kwargs):
>         SocketHandler.listeners.append(self)
>         self.write_message('HI!')
>
>     @classmethod
>     def to_all(cls, msg):
>         for l in cls.listeners:
>             l.write_message(msg)
>
> def report():
>     context = zmq.Context()
>     socket = context.socket(zmq.SUB)
>     socket.connect("tcp://localhost:8000")
>     while True:
>         msg = socket.recv()
>         SocketHandler.to_all(msg)
>
> HTTPServer(Application([
> ("/socket", SocketHandler)
> ], debug=True)).listen(9999)
>
> t = Thread(target=report).start()
> IOLoop.instance().start()
>
> Como en realidad no funcionaría como un request asíncrono de tornado, o
> por lo menos de la forma en la que yo lo entiendo. Ya que en realidad el
> cliente no hace requests si no que sólo escucha en el websocket y espera.
> Por otro lado, el thread que reporta los mensajes no modifica ninguna
> estructura, con lo cual no debería haber motivos por que no sea thread safe.
>  Pero no se si se me está escapando algo.
>
> Gracias y saludos
> _______________________________________________
> 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
>
>
>
> _______________________________________________
> 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/20150604/0bdee370/attachment.html>


More information about the pyar mailing list