我正在用 Python 编写一个聊天服务器来完成一项任务。但是,我在关闭服务器时遇到问题。这是正在发生的事情:
当客户端连接时,我生成两个线程: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';
现在,当我收到 时EXIT,我设置dowrite为 false,但是,当然,这不会因为阻塞调用而中断 while 循环sys.stdin.readline().strip()。
所以,会发生什么:断开连接,客户端需要发送EXIT,然后我需要在控制台上点击返回。有什么办法可以解决这个问题,这样当客户端发送退出消息时,我会立即跳出write().
编辑 它是如何结合在一起的:
主线程产生两个线程 :read和write,然后等待(连接)read完成。Read当它读取时完成EXIT。线程一read结束,主线程就会继续并dowrite在写线程中设置为 false,这应该结束写循环,但这只能在 while 循环再迭代一次时发生。