Для парсинга информации используйте асинхронное программирование (в Python 3.5+ стандартный модуль asyncio и внешняя библиотека aiohttp) и не занимайтесь ерундой с многопоточностью. Вот кусок кода из моего собственного проекта с вебсокетами:
async def run(self):
if not self.chains:
return
command = f'{{"command": "subscribe", "channel": "{self.name}"}}'
while True:
await asyncio.sleep(len(self.exchange.markets)*random())
try:
async with websockets.connect(self.wss, max_queue=0) as self.websocket:
await asyncio.wait_for(self.websocket.send(command), timeout=10)
while True:
data = await asyncio.wait_for(self.websocket.recv(), timeout=20)
data = json.loads(data, cls=DeepDecoder)
asyncio.ensure_future(self.process_websocket_message(data))
except asyncio.TimeoutError as error:
print(f'{self.name}: WEBSOCKET_TIMEOUT: {error}')
except websockets.ConnectionClosed as error:
print(f'{self.name}: WEBSOCKET_CLOSED: {error}')
except (asyncio.CancelledError, KeyboardInterrupt, SystemExit) as error:
print(f'{self.name}: TASK_CANCELLED: {error}')
self.clear()
return
except Exception as error:
print(f'{self.name}: {error}')
finally:
self.clear()