我正在用 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 循环再迭代一次时发生。