Код с подключением к вебсокету останавливается через время. Python

Пишу небольшой код, который вытягивает мой баланс на бирже KuCoin. Я использую технологию вебсокетов, но проблема заключается в том что через какое-то время(может через 2 часа, а может и через сутки) код по какой-то причине престаёт работать. При этом никакой ошибки нет, просто process finished with exit code 0

Вот мой код:

import base64
import hashlib
import hmac
import json
import time
from datetime import datetime

import requests
import websocket
from websocket._exceptions import WebSocketConnectionClosedException

from config import APIs
from database import DB

api_public = APIs['KuCoin']['public']
api_private = APIs['KuCoin']['private']
api_passphrase = APIs['KuCoin']['passphrase']


db = DB()


def on_open(ws):
    request = {
        "id": int(time.time() * 1000),
        "type": "subscribe",
        "topic": "/account/balance",
        "privateChannel": True,
        "response": True
    }
    ws.send(json.dumps(request))


def on_message(ws, message):
    data = json.loads(message)
    print(data)
    # Записываю балансы в базу данных
    if 'data' in data.keys():
        db.execute('''
            delete from KuCoinWallet where coin = %s
        ''', (data['data']['currency'],))
        db.execute('''
            insert into KuCoinWallet(coin, amount) values(%s, %s)
        ''', (data['data']['currency'], data['data']['available']))


def on_error(ws, error):
    if type(error) is WebSocketConnectionClosedException:
        main()


def make_signature(timestamp):
    string = timestamp + 'POST' + '/api/v1/bullet-private'
    signature = base64.b64encode(
        hmac.new(api_private.encode('utf-8'), string.encode('utf-8'), hashlib.sha256).digest())

    return signature


def make_passphrase():
    passphrase = base64.b64encode(
        hmac.new(api_private.encode('utf-8'), api_passphrase.encode('utf-8'), hashlib.sha256).digest())
    return passphrase


def on_ping(ws, *data):
    print('рing')


def on_pong(ws, *data):
    print('pong received')


def main():
    timestamp = str(int(time.time() * 1000))
    headers = {
        'KC-API-KEY': api_public,
        'KC-API-SIGN': make_signature(timestamp),
        'KC-API-TIMESTAMP': timestamp,
        'KC-API-PASSPHRASE': make_passphrase(),
        'KC-API-KEY-VERSION': '2',
        "Content-Type": "application/json"
    }
    token = json.loads(requests.request(method='POST', url='https://api.kucoin.com/api/v1/bullet-private',
                                        headers=headers).text)['data']['token']

    url = f'wss://ws-api-spot.kucoin.com?token={token}&[connectId={timestamp}]'
    ws = websocket.WebSocketApp(
        url=url,
        on_open=on_open,
        on_message=on_message,
        on_ping=on_ping,
        on_pong=on_pong
    )
    ws.run_forever(
        ping_interval=20,
        ping_timeout=10
    )


if __name__ == '__main__':
    main()

Ответы (0 шт):