如何解决由于套接字接收回调,线程没有干净地结束
我试图在执行关闭处理程序回调时关闭套接字并终止线程(我通过 CTRL+C 发送 SIGINT 信号)
主要
from example import Example
if __name__ == '__main__':
exmpl = Example()
success = exmpl.connect('',2000)
if success:
rospy.on_shutdown(exmpl.shutdown_handler)
rospy.spin()
导入的类
import socket
import threading
class Example(object):
def connect(self,host='',port=2000):
try:
self.sock = socket.socket(socket.AF_INET,socket.soCK_STREAM)
self.sock.settimeout(10)
self.sock.bind((host,port))
self.sock.listen(1)
self.conn,self.addr = self.sock.accept()
self.sock.settimeout(None)
self.t = threading.Thread(target=self.recv_msg)
self.t.start()
return True
except Exception as e:
return False
except Exception as timeout:
return False
def recv_msg(self):
while True:
recv_msg = self.conn.recv(1024)
print(recv_msg)
def shutdown_handler(self):
try:
self.sock.close()
self.t.join()
except Exception as e:
print(e)
在这个应用程序中,recv_msg 总是在执行,因为数据一直在到来。因此,当我发送 SIGINT 时,关闭处理程序启动并且只执行语句 sock.close() 而不是 t.join() 并且线程永远不会结束
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。