0

我正在用 Python 编写一个聊天服务器来完成一项任务。但是,我在关闭服务器时遇到问题。这是正在发生的事情:

当客户端连接时,我生成两个线程:readThreadwriteThread. 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().

编辑 它是如何结合在一起的:

主线程产生两个线程 :readwrite,然后等待(连接)read完成。Read当它读取时完成EXIT。线程一read结束,主线程就会继续并dowrite在写线程中设置为 false,这应该结束写循环,但这只能在 while 循环再迭代一次时发生。

4

1 回答 1

1

使子线程成为守护进程:

t.daemon = True

如果您的程序退出,守护线程将停止。

您可以使用事件来通知其他线程。在事件发生的线程中:

event.set() # event occurred

在其他线程中:

event.wait() # wait for event
于 2012-08-20T00:45:08.733 回答