websocket深堀り4回シリーズ
- そもそもwebsocketとは
- ビットコインのデータをwebsoketで受信 → クラス化
- websocket受信クラス → threadingでマルチタスク化
- websocketクラスをマルチタスクでビットフライヤーとバイナンスの同時受信
複数の取引所のデータを同時受信しながら取引のための準備データ受信編2
クラス化したwebsocketをthreading化する
すると別の取引所のwebsocketデータを同時に受け取り、同時にプリントすることができる
先ずはthreading化
import json
from threading import Thread
import websocket
class BfWebSocket(Thread): #threading.Threadを継承する
def __init__(self):
Thread.__init__(self) ##コレをしないと怒られる
self.CHANNEL = "lightning_executions_BTC_JPY"
self.url = "wss://ws.lightstream.bitflyer.com/json-rpc"
def run(self):
# note: reconnection handling needed.
ws = websocket.WebSocketApp(self.url, on_message=self.on_message, on_open=self.on_open)
ws.run_forever()
def on_message(self,ws, message):
self.message = json.loads(message)
##pprint(self.message)
if self.message["method"] == "channelMessage":
self.last1=self.message["params"]["message"][0]
print(f'\nBitfler_BTC {self.last1["exec_date"][:19]} {int(self.last1["price"]):,.0f} {self.last1["side"]:4} {self.last1["size"]:.2f}\n')
def on_open(self,ws):
ws.send(json.dumps({"method": "subscribe",
"params": {"channel": self.CHANNEL}}))
#main クラスの中にデータ類も閉じ込めたのでメインはこれだけ-----------------------
BF = BfWebSocket()
BF.start()
BF.join()
では、次回は、バイナンスのwebsocket受信をクラス化したものを、
このBFのクラスと同時にマルチスレッドとして実行させて、データを同時に出力してみます。
コメント