私はPythonでWebSocketを使用しようとしていますが、私は以前これについて質問しました。しかし、私がすぐに気付いたのは、サーバーに接続していたのは「ワン・オフ」メッセージのためであり、私がやりたいことは常に通知を聞く必要があるということでした。私は次のコードを見ることができますpython websocket clientのドキュメントで :Pythonで長生きのwebsocket接続を作成するには?
import websocket
import thread
import time
def on_message(ws, message):
print message
def on_error(ws, error):
print error
def on_close(ws):
print "### closed ###"
def on_open(ws):
def run(*args):
for i in range(3):
time.sleep(1)
ws.send("Hello %d" % i)
time.sleep(1)
ws.close()
print "thread terminating..."
thread.start_new_thread(run,())
if __name__ == "__main__":
websocket.enableTrace(True)
ws = websocket.WebSocketApp("ws://echo.websocket.org/",
on_message = on_message,
on_error = on_error,
on_close = on_close)
ws.on_open = on_open
ws.run_forever()
事は、私はまだのpythonに非常に新たなんだ、と私は完全にこのコードを理解していない、です。それはサンプルコードであり、私がそれを必要としないことを行うので、私はそれがどのように動作するのか理解したいと思います。例えば、forループが何のために必要であるか、または__name__
と__main__
が何のために必要であるかを理解できません。
良い方法がありますか?
おかげで、 サス:)
よろしく!今、私は分かる!しかし、 "def run * args"と "thread.start_new_thread(run、())"はどうでしょうか?私の推測では、新しいスレッドの作成は実行関数の外にあるので、私はすべてのコードを実行funtionに入れて、 "thread.start_new_thread(run、())"という関数を呼び出します。あれは正しいですか?問題は、なぜ、スレッドを作成する前にws.close()があるのか分かりません。それはなぜそこにあるの? – iSasFTW
@iSasFTW 'run'関数が実行される前にスレッドが作成されています。これには' ws.close() 'が含まれています。だから、実際にはスレッドが閉じられる前にスレッドが作成されているので、 '{}'を囲んでいないときにPython構文がちょっと混乱することがあります – Tropic