0
私は、スラックチャンネルを監視するために以下のスクリプトを用意しています。私のスクリプトは何週間もうまく動作しますが、しばらくの間、例外がキャッチされ、 socket is already closed
というように表示されます。このエラーでリソースを見つけることができませんが、再接続することはありません。私はこのエラーが永遠に現れたらそれを得続ける。slack apiを使っているときに、Pythonで `socket is already closed 'エラーを避けるにはどうしたらいいですか?
なぜそれが起こっているのか、その解決策は何かを理解したいですか?あなたはのtry-catch-再接続方法でそれをしなければならない
import os
import time
from slackclient import SlackClient
# constants
BOT_ID = os.environ["LOUD_BOT_ID"]
LOUD_BOT_TOKEN = os.environ["LOUD_BOT_TOKEN"]
AT_BOT = "<@" + BOT_ID + ">"
slack_client = SlackClient(os.environ["LOUD_BOT_TOKEN"])
def parse_slack_output(rtm_read_output):
output_list = rtm_read_output
if output_list and len(output_list) > 0:
for output in output_list:
if output and "text" in output and AT_BOT in output["text"]:
return (
output["text"].split(AT_BOT)[1].strip(),
output["channel"],
output["user"]
)
return None, None, None
if __name__ == "__main__":
READ_WEBSOCKET_DELAY = 1
if slack_client.rtm_connect():
print "Bot is up and running..."
while True:
try:
message, channel, sender_user_id = parse_slack_output(
slack_client.rtm_read()
)
print message, channel, sender_user_id
time.sleep(READ_WEBSOCKET_DELAY)
except Exception as e:
print e
time.sleep(READ_WEBSOCKET_DELAY)
else:
print "Couldn't connect bot, please check bot's token and ID"
おかげ
それは長い時間のために正常に動作し、突然ソケット閉じた状態で失敗した場合、ではありませんピアを閉鎖する可能性は高いですか?ただメッセージを記録して、再接続を試みてください。 – moopet
@moopet私はエラーループから抜け出ることはありません。ソケットは永遠に閉じてください。 – igaurav
あなたの例外ハンドラは* anything *をしないので、そうです。あなたは 'try'ブロックの中に接続と処理ループ全体を持ち、例外ハンドラは丁寧な時間を待ってからやり直します。 – moopet