websocket深堀り4回シリーズ-3 マルチタスキング化する threading

複数の取引所のデータを同時受信しながら取引のための準備データ受信編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のクラスと同時にマルチスレッドとして実行させて、データを同時に出力してみます。

コメント

タイトルとURLをコピーしました