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()