Q&A
pythonのsocketライブラリでtcp通信プログラムを作成しました。
サーバーから毎秒データを送っているのですが、突然何のエラーもなくclient.pyのif not rcv_dataでプログラムが停止してしまいます。
try exceptでもエラーが出ていないため、原因が全く分からないのですが、何か原因としてありそうなことを教えていただきたいです。
環境はAWS EC2 AmazonLinux2でcloud9で動かしています。
AWS EC2のモニタリングでCPU使用率を確認してみましたが、停止時間中でもそれ以外の時間より高いというわけではなく10~20%程度でした。
python
1# client.py 2socket_client = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 3socket_client.connect(("localhost", 8080)) 4while True: 5 try: 6 rcv_data = socket_client.recv(1024) 7 logger.info("{} recv {}".format(datetime.utcnow(), rcv_data.decode())) 8 if not rcv_data: 9 logger.info("Disconnect") 10 break 11 else: 12 logger.info("{} {}".format(datetime.utcnow(), "send ok")) 13 socket_client.send("ok".encode()) 14 except: 15 traceback.print_exc() 16 17 18# 実際に動かすと数時間後に下記のようにif not rcvの処理で4時間以上停止している 192022-06-03 00:03:00.621 recv test 202022-06-03 00:03:00.848 send ok 21... 222022-06-03 02:03:05.621 recv test 232022-06-03 06:42:57.848 send ok 24
python
1#server.py 2sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM) 3sock.bind(("localhost", 8080)) 4sock.listen() 5client,remote_addr = sock.accept() 6while True: 7 client.send("test".encode()) 8 rcv_data = client.recv(1024) 9 time.sleep(1)
このほかにthreadingでwhile Trueの無限ループで3秒ごとにログを出力する関数も動かしているのですが、そちらも止まっていました。
プログラム全体が止まってしまっていると思うのですが、これはsocketライブラリによって引き起こされているのでしょうか?
回答1件
下記のような回答は推奨されていません。
このような回答には修正を依頼しましょう。
2022/06/04 08:49 編集
2022/06/04 10:40 編集