我正在用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,但是,当然,由于阻塞调用 sys.stdin.readline().strip()
,这不会破坏while循环 .
那么,会发生什么:断开连接,客户端需要发送 EXIT
,然后我需要在控制台上点击返回 . 有什么方法可以解决这个问题,所以当客户端发送退出消息时,我会立即在 write()
中跳出while循环 .
EDIT 它如何结合在一起:
主线程产生两个线程: read
和 write
,然后等待(连接) read
完成 . Read
在读取 EXIT
时结束 . 一旦 read
线程结束,主线程继续并在写线程中将 dowrite
设置为false,这应该结束写循环,但这只能在while循环再次迭代一次时发生 .
1 回答
使子线程成为守护进程:
如果您的程序退出,守护程序线程将停止 .
您可以使用an event通知其他线程 . 在发生事件的线程中:
在其他线程中: