kill关闭unix socket

时间:2017-05-07 18:07:52

标签: python multithreading sockets unix-socket

Socket.close()不会阻止任何已经在该套接字上运行的阻塞的socket.accept()调用。

我的python程序中有几个线程只在已经关闭的unix域套接字上运行阻塞的socket.accept()调用。 我想通过使socket.accept()调用stop或来杀死这些线程 提出异常。

我试图通过在程序中加载新代码来完成此操作,而无需停止程序。 因此,更改生成这些线程的代码或关闭套接字的代码不是一种选择。

有没有办法做到这一点?

这类似于https://stackoverflow.com/a/10090348/3084431,但这些解决方案对我的代码不起作用:

  1. 这一点不成立,关闭不会引发接受的异常。 shutdown会关闭,但是当线程关闭时不能再调用它。
  2. 我无法再连接到此套接字。插座已关闭。
  3. 带有accept调用的线程已经在运行,我无法更改它们。
  4. 与3相同
  5. 为了澄清,我写了一些有这个问题的示例代码。 此代码适用于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
    

    我需要的是在代码完成后我可以运行的东西可以以某种方式停止接受者线程。

0 个答案:

没有答案