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

lukas lei lukaslei en hotmail.com
Mar Ene 16 10:43:19 ART 2018


Muchas gracias por toda las respuestas.


Finalmente opte por hacer un motor de consultas y utilizar 1 unica conexion para todos thread

Saludos y gracias nuevamente.


________________________________
De: pyar <pyar-bounces en python.org.ar> en nombre de Andres Riancho <andres.riancho en gmail.com>
Enviado: martes, 16 de enero de 2018 10:37 a.m.
Para: Python Argentina
Asunto: Re: [pyar] AYUDA: error WebSocket usando multi threading conectando con API

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<mailto: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<mailto:pyar-bounces en python.org.ar>> en nombre de Andres Riancho <andres.riancho en gmail.com<mailto: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<mailto: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<mailto:pyar en python.org.ar>
> Sitio web: http://www.python.org.ar/
PyAr - Python Argentina<http://www.python.org.ar/>
www.python.org.ar<http://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<http://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<http://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<mailto:pyar en python.org.ar>
Sitio web: http://www.python.org.ar/
PyAr - Python Argentina<http://www.python.org.ar/>
www.python.org.ar<http://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<http://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<mailto: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/1c667c32/attachment-0001.html>


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