[pyar] AYUDA: error WebSocket usando multi threading conectando con API

Andres Riancho andres.riancho en gmail.com
Mar Ene 16 07:37:41 ART 2018


Podrías hacerlo con locks, de tal manera de que solo un thread escriba /
lea del socket en cada momento.

Pero habría que ver si es la mejor opción en cuanto a performance.

El 16 ene. 2018 2:01 a. m., "lukas lei" <lukaslei en hotmail.com> escribió:

> Andres, gracias por la respuesta.
>
>
> Creo que es eso lo que esta pasando. Sabras si hay alguna manera de
> multiplexar 1 unica conexion WS. O tengo que establecer una conexion por
> cada thread.
> nuevamente muchas gracias
>
> saludos
>
>
> ------------------------------
> *De:* pyar <pyar-bounces en python.org.ar> en nombre de Andres Riancho <
> andres.riancho en gmail.com>
> *Enviado:* lunes, 15 de enero de 2018 01:46 p.m.
> *Para:* Python Argentina
> *Asunto:* Re: [pyar] AYUDA: error WebSocket usando multi threading
> conectando con API
>
> Lucas,
>
>     No vi el detalle del problema, pero algo que noto es que dos
> threads estan usando la misma conexion? Eso no es buena idea. Puede
> pasar que ambos envien cosas y que el mensaje llegue entre-cortado al
> server. Es decir, puede llegar a pasar que por la conexion del WS se
> envie:
>
> ```
> msj 1 almsj 2 al ws ws
> ```
>
>     Entonces el server no entiende nada y cierra la conexion.
>
> Saludos,
>
> 2018-01-15 10:26 GMT-03:00 lukas lei <lukaslei en hotmail.com>:
> > Buenos dias.
> >
> > Estoy trabajando en Python 3.6,  consumiendo un API mediante WebSocket
> (WS).
> >
> > Tengo la siguiente situación:
> >
> >
> > Cuando abro una conexión WS y luego divido el procesamiento en 2 hilos y
> le
> > envío msj al ws, el segundo hilo me da error al recibir las respuestas.
> >
> > Abajo les dejo el ejemplo y el error. Estimo que debe ser algo en el
> > reconocimiento entre el cliente y el srv que se rompe.
> >
> >
> > Alguien que me pueda ayudar?
> >
> > desde ya muchas gracias, saludos.
> >
> > Lucas
> >
> >
> > Seria algo así a modo de ejemplo:
> >
> >
> > from websocket import create_connection
> > import time, threading
> >
> > def conecta(**datos):
> >     nro_ope = datos['nro_ope']
> >     ws = datos['ws']
> >     msg = datos['msg']
> >     print('ENTRO A ---------------' + str(nro_ope))
> >     print("Sending"+ str(nro_ope))
> >     ws.send(msg)
> >     print("Sent"+ str(nro_ope))
> >     contador = 0
> >     ws.settimeout(300)
> >     while contador < 10:
> >         contador += 1
> >         print(str(nro_ope) + "Receiving..." + str(contador))
> >         result =  ws.recv()
> >         print(str(nro_ope) + " => Received1" + str(result))
> >
> > # //--- Cuerpo del scrip
> >
> > ws = create_connection(url, cookie=cookie)
> > print("Sending")
> > mensaje1 = 'msj 1 al ws'
> > mensaje2 = 'msj 2 al ws'
> >
> > hilo1 = threading.Thread(target=conecta, kwargs={'nro_ope': 1,'ws': ws,
> > 'msg': mensaje1},  name='hilo1')
> > hilo1.setDaemon(False)
> > hilo1.start()
> >
> > time.sleep(5)
> >
> > hilo2  = threading.Thread(target=conecta,kwargs={'nro_ope': 2,'ws': ws,
> > 'msg': mensaje2}, name='hilo2')
> > hilo2.setDaemon(False)
> > hilo2.start()
> >
> > a = 1
> > while 1 == 1:
> >     a = a +1
> >     time.sleep(1)
> >
> >
> > ERROR:
> >
> > Exception in thread hilo2:
> > Traceback (most recent call last):
> >   File "C:\Program Files\Python\Python36-32\lib\threading.py", line
> 916, in
> > _bootstrap_inner
> >     self.run()
> >   File "C:\Program Files\Python\Python36-32\lib\threading.py", line
> 864, in
> > run
> >     self._target(*self._args, **self._kwargs)
> >   File "C:/Users/user1/PycharmProjects/Desarrollo/pruebaWS_multiple.py",
> > line 24, in conecta
> >     result =  ws.recv()
> >   File "C:\Program
> > Files\Python\Python36-32\lib\site-packages\websocket\_core.py", line
> 293, in
> > recv
> >     opcode, data = self.recv_data()
> >   File "C:\Program
> > Files\Python\Python36-32\lib\site-packages\websocket\_core.py", line
> 310, in
> > recv_data
> >     opcode, frame = self.recv_data_frame(control_frame)
> >   File "C:\Program
> > Files\Python\Python36-32\lib\site-packages\websocket\_core.py", line
> 323, in
> > recv_data_frame
> >     frame = self.recv_frame()
> >   File "C:\Program
> > Files\Python\Python36-32\lib\site-packages\websocket\_core.py", line
> 357, in
> > recv_frame
> >     return self.frame_buffer.recv_frame()
> >   File "C:\Program
> > Files\Python\Python36-32\lib\site-packages\websocket\_abnf.py", line
> 336, in
> > recv_frame
> >     self.recv_header()
> >   File "C:\Program
> > Files\Python\Python36-32\lib\site-packages\websocket\_abnf.py", line
> 286, in
> > recv_header
> >     header = self.recv_strict(2)
> >   File "C:\Program
> > Files\Python\Python36-32\lib\site-packages\websocket\_abnf.py", line
> 371, in
> > recv_strict
> >     bytes_ = self.recv(min(16384, shortage))
> >   File "C:\Program
> > Files\Python\Python36-32\lib\site-packages\websocket\_core.py", line
> 427, in
> > _recv
> >     return recv(self.sock, bufsize)
> >   File "C:\Program
> > Files\Python\Python36-32\lib\site-packages\websocket\_socket.py", line
> 80,
> > in recv
> >     bytes_ = sock.recv(bufsize)
> >   File "C:\Program Files\Python\Python36-32\lib\ssl.py", line 987, in
> recv
> >     return self.read(buflen)
> >   File "C:\Program Files\Python\Python36-32\lib\ssl.py", line 865, in
> read
> >     return self._sslobj.read(len, buffer)
> >   File "C:\Program Files\Python\Python36-32\lib\ssl.py", line 627, in
> read
> >     v = self._sslobj.read(len)
> > ssl.SSLError: [SSL: SSLV3_ALERT_BAD_RECORD_MAC] sslv3 alert bad record
> mac
> > (_ssl.c:2178)
> >
> > Exception in thread hilo1:
> > Traceback (most recent call last):
> >   File "C:\Program Files\Python\Python36-32\lib\threading.py", line
> 916, in
> > _bootstrap_inner
> >     self.run()
> >   File "C:\Program Files\Python\Python36-32\lib\threading.py", line
> 864, in
> > run
> >     self._target(*self._args, **self._kwargs)
> >   File "C:/Users/user1/PycharmProjects/Desarrollo/pruebaWS_multiple.py",
> > line 24, in conecta
> >     result =  ws.recv()
> >   File "C:\Program
> > Files\Python\Python36-32\lib\site-packages\websocket\_core.py", line
> 293, in
> > recv
> >     opcode, data = self.recv_data()
> >   File "C:\Program
> > Files\Python\Python36-32\lib\site-packages\websocket\_core.py", line
> 310, in
> > recv_data
> >     opcode, frame = self.recv_data_frame(control_frame)
> >   File "C:\Program
> > Files\Python\Python36-32\lib\site-packages\websocket\_core.py", line
> 323, in
> > recv_data_frame
> >     frame = self.recv_frame()
> >   File "C:\Program
> > Files\Python\Python36-32\lib\site-packages\websocket\_core.py", line
> 357, in
> > recv_frame
> >     return self.frame_buffer.recv_frame()
> >   File "C:\Program
> > Files\Python\Python36-32\lib\site-packages\websocket\_abnf.py", line
> 336, in
> > recv_frame
> >     self.recv_header()
> >   File "C:\Program
> > Files\Python\Python36-32\lib\site-packages\websocket\_abnf.py", line
> 286, in
> > recv_header
> >     header = self.recv_strict(2)
> >   File "C:\Program
> > Files\Python\Python36-32\lib\site-packages\websocket\_abnf.py", line
> 371, in
> > recv_strict
> >     bytes_ = self.recv(min(16384, shortage))
> >   File "C:\Program
> > Files\Python\Python36-32\lib\site-packages\websocket\_core.py", line
> 427, in
> > _recv
> >     return recv(self.sock, bufsize)
> >   File "C:\Program
> > Files\Python\Python36-32\lib\site-packages\websocket\_socket.py", line
> 80,
> > in recv
> >     bytes_ = sock.recv(bufsize)
> >   File "C:\Program Files\Python\Python36-32\lib\ssl.py", line 987, in
> recv
> >     return self.read(buflen)
> >   File "C:\Program Files\Python\Python36-32\lib\ssl.py", line 865, in
> read
> >     return self._sslobj.read(len, buffer)
> >   File "C:\Program Files\Python\Python36-32\lib\ssl.py", line 627, in
> read
> >     v = self._sslobj.read(len)
> > BlockingIOError: [WinError 10035] A non-blocking socket operation could
> not
> > be completed immediately
> >
> >
> >
> >
> > _______________________________________________
> > Lista de Correo de PyAr - Python Argentina - pyar en python.org.ar
> > Sitio web: http://www.python.org.ar/
> PyAr - Python Argentina <http://www.python.org.ar/>
> www.python.org.ar
> Comunidad Python Argentina. Nuestro objetivo es nuclear a los usuarios de
> Python. Pretendemos llegar a personas y empresas, promover el uso de Python
> e intercambiar ...
>
>
> >
> > Para administrar la lista (o desuscribirse) entrar a
> > http://listas.python.org.ar/listinfo/pyar
> Página de Información de pyar - listas.python.org.ar
> <http://listas.python.org.ar/listinfo/pyar>
> listas.python.org.ar
> Lista de corre del grupo PyAr - Python Argentina. Para ver envíos
> anteriores a la lista, puede visitar los archivos de pyar . Para buscar en
> el ...
>
>
> >
> > La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de
> > Argentina - http://www.usla.org.ar
>
>
>
> --
> Andrés Riancho
> Project Leader at w3af - http://w3af.org/
> w3af - Open Source Web Application Security Scanner <http://w3af.org/>
> w3af.org
> w3af is a Web Application Attack and Audit Framework. The project's goal
> is to create a framework to find and exploit web application
> vulnerabilities that
>
>
> Web Application Attack and Audit Framework
> Twitter: @w3af
> GPG: 0x93C344F3
> _______________________________________________
> Lista de Correo de PyAr - Python Argentina - pyar en python.org.ar
> Sitio web: http://www.python.org.ar/
> PyAr - Python Argentina <http://www.python.org.ar/>
> www.python.org.ar
> Comunidad Python Argentina. Nuestro objetivo es nuclear a los usuarios de
> Python. Pretendemos llegar a personas y empresas, promover el uso de Python
> e intercambiar ...
>
>
>
> Para administrar la lista (o desuscribirse) entrar a
> http://listas.python.org.ar/listinfo/pyar
> Página de Información de pyar - listas.python.org.ar
> <http://listas.python.org.ar/listinfo/pyar>
> listas.python.org.ar
> Lista de corre del grupo PyAr - Python Argentina. Para ver envíos
> anteriores a la lista, puede visitar los archivos de pyar . Para buscar en
> el ...
>
>
>
> 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/20180116/ecf71c15/attachment-0001.html>


Más información sobre la lista de distribución pyar