Socket.close()不会阻止任何已经在该套接字上运行的阻塞的socket.accept()调用。
我的python程序中有几个线程只在已经关闭的unix域套接字上运行阻塞的socket.accept()调用。 我想通过使socket.accept()调用stop或来杀死这些线程 提出异常。
我试图通过在程序中加载新代码来完成此操作,而无需停止程序。 因此,更改生成这些线程的代码或关闭套接字的代码不是一种选择。
有没有办法做到这一点?
这类似于https://stackoverflow.com/a/10090348/3084431,但这些解决方案对我的代码不起作用:
为了澄清,我写了一些有这个问题的示例代码。 此代码适用于python 2和python 3。
import socket
import threading
import time
address = "./socket.sock"
sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
sock.bind(address)
sock.listen(5)
def accept():
print(sock.accept())
t = threading.Thread(target=accept, name="acceptorthread")
t.start()
sock.close()
time.sleep(0.5) # give the thread some time to register the closing
print(threading.enumerate()) # the acceptorthread will still be running
我需要的是在代码完成后我可以运行的东西可以以某种方式停止接受者线程。