Django запускает вебсокетный клиент в фоновом режиме

Когда я запускаю WebSocket клиент, я больше не могу связаться с приложением Django, как будто я не могу подключиться к 127.0.0.1:8000, вот файл WebSocket:

import websocket, json, pprint
from datetime import datetime


socket = "wss://stream.binance.com:9443/ws/manausdt@kline_1m"


def on_message(ws, msg):
    message = json.loads(msg)
    messageData = message['k']

    if messageData['x']:
        # get_data(messageData)
        timestamp = float(messageData['t'])
        symbol = messageData['s']
        interval = messageData['i']
        closeprice = float(messageData['c'])
        openprice = float(messageData['o'])
        highprice = float(messageData['h'])
        lowprice = float(messageData['l'])
        datetime_ob = datetime.fromtimestamp(timestamp / 1000)

        data = {'timestamp': timestamp, 'symbol': symbol, 'interval': interval, 'closeprice': closeprice,
                'openprice': openprice, 'highprice': highprice, 'lowprice': lowprice, 'datetime_ob': datetime_ob}

        print(data)


def on_open(ws):
    print('Connected!')


def on_error(wsapp, err):
    print("Got a an error: ", err)


def runwss():
    stream = websocket.WebSocketApp(socket, on_error=on_error, on_open=on_open, on_message=on_message)
    stream.run_forever()


runwss()

И я вставил его в файл apps:

from django.apps import AppConfig


class ServiceGetDataConfig(AppConfig):
    default_auto_field = 'django.db.models.BigAutoField'
    name = 'service_get_data'

    def ready(self):
        import service_get_data.wss

Как я уже сказал, я больше не могу связаться с 127.0.0.1:8000, так что же мне делать в этом случае?

Вы импортируете вебсокет в метод ready() вашего приложения, поэтому ваш метод ready не продолжается и не завершается, как он должен, поэтому он застрял в бесконечном цикле вебсокета.

Я предлагаю использовать библиотеку, которая выполняет за вас тяжелую работу с сокетами за сценой: https://channels.readthedocs.io/en/stable/tutorial/part_2.html

Хотя, если вам нужен клиент, вы можете просто подключиться к нему из вашего фронтенда и передать html через django

Я искал в Интернете и в итоге использовал Threading модуль:

thread = threading.Thread(target=runwss)
thread.start()
Вернуться на верх