python - 在Python中终止线程中的socket.recv

标签 python multithreading sockets

为了在 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/

相关文章:

c - 在c中使用UDP和TCP套接字编程建立连接

python - 'cv::Point2f&' 类型的非常量引用的初始化无效

javascript - 使用 Django 将 JSON 传递给 Javascript 时出现问题

c++ - 在 OpenMP for 循环中调用函数

gethostbyname() 可以返回 IPv6 地址吗?

c - Linux,C,套接字 : how to specify TCP client port with structure sockaddr_storage

Python - 在程序外保存数据

python - 设置导航工具栏和拾取事件的顶级轴

multithreading - 为什么本地创建的结构不能发送到另一个线程?

java - 两个同步方法是否同时执行