課題のためにPythonでチャットサーバーを書いています。ただし、サーバーのシャットダウンで問題が発生します。何が起こっているのか:
クライアントが接続すると、2つのスレッドが生成されます:readThread
とwriteThread
。クライアントからのデータの読み取りとへのreadThread
印刷を担当し、クライアントからのメッセージの読み取りとクライアントへの送信を担当します。stdout
writeThread
stdin
クライアントが送信'EXIT'
したら、サーバーをシャットダウンしたいと思います。私writeThread
は次のようなループで実行されます:
def write(self) :
while self.dowrite :
data = sys.stdin.readline().strip();
self.conn.send(data);
print 'WriteThread loop ended';
さて、を受け取ったときはfalseEXIT
に設定dowrite
しましたが、もちろん、呼び出しがブロックされているため、whileループは中断されませんsys.stdin.readline().strip()
。
つまり、切断するには、クライアントがを送信するEXIT
必要があり、次にコンソールでReturnキーを押す必要があります。これを回避する方法はありますか?クライアントが終了メッセージを送信すると、すぐにwhileループから抜け出しますwrite()
。
編集 それがどのように一緒になるか:
メインスレッドは2つのスレッド:read
とを生成し、終了するwrite
のを待ちます(結合します)read
。Read
を読み取ると終了しますEXIT
。スレッドが終了するとすぐにread
、メインスレッドは続行dowrite
し、書き込みスレッドでfalseに設定されます。これにより、書き込みループが終了しますが、これは、whileループがもう一度繰り返される場合にのみ発生します。