websocket-clientパッケージを用いて、随時送られてくるwebsocketデータを受信するプログラムを作成しているのですが、
on_message関数内の処理に時間がかかるため、処理中に次のデータが送られてきてしまう場合があります。
この場合、現在のon_message関数の処理が完了するまで次のon_message関数の実行を待機する挙動となっている認識です。
これを並列処理(on_message関数の完了を待たずに次のon_message関数を実行)させるにはどうすればよいでしょうか。
以下のようなコードを想定しています。
python
1class Test1(): 2 def __init__(self,host_adr): 3 print("### start ###") 4 self.ws = websocket.WebSocketApp(host_addr, 5 on_message=lambda ws, msg: self.on_message(ws, msg), 6 on_error=lambda ws, msg: self.on_error(ws, msg), 7 on_close=lambda ws: self.on_close(ws)) 8 self.ws.on_open = lambda ws: self.on_open(ws) 9 websocketThread = threading.Thread(target=self.run_forever, args=()) 10 websocketThread.start() 11 12 def on_message(self, ws, message): 13 (この部分の処理が時間がかかってしまうので、並列処理させたいです) 14 15 def on_error(self, ws, error): 16 print(error) 17 18 def on_close(self, ws): 19 print("### closed ###") 20 21 def on_open(self, ws): 22 thread.start_new_thread(self.run, ()) 23 24 def run(self, *args): 25 time.sleep(0.1) 26 input_data = (Websocket開始時に送るデータ) 27 self.ws.send(input_data) 28 29 def run_forever(self): 30 while True: 31 try: 32 self.ws.run_forever() 33 except Exception as e: 34 print(e) 35 time.sleep(3) 36 37if __name__ == '__main__': 38 HOST_ADDR = (WebSocket送信元) 39 ws_client = Test1(HOST_ADDR)
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。