为了在 python 中实现一个简单的协议(protocol),我使用了一个线程来监视接收者发送的确认。为此,我在函数中使用线程
def ackListener(self):
while self.waitingforack:
ack = self.socket_agent.recv(4)
...
exit()
哪里self.waitingforack
是一个 bool 值,我设置为 False
当我收到我发送的每条消息的确认时。
问题是我的代码在 self.socket_agent.recv(4)
处阻塞操作,修改waitingforack
的值做得太晚了
当我不再等待确认时,有没有办法强制线程终止?
谢谢
最佳答案
请记住,在您的情况下,这些操作(如recv)是阻塞操作。 因此,除非您收到数据,否则调用此函数会阻塞。
有两种方法可以实现:
使套接字非阻塞
socket.setblocking(0)
设置超时值 请参阅:http://docs.python.org/library/socket.html#socket.socket.settimeout
socket.settimeout(value)
使用异步方法
关于python - 在Python中终止线程中的socket.recv,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3990101/