【问题标题】:Python break from socket receive on SIGINTPython 在 SIGINT 上从套接字接收中断
【发布时间】:2018-03-21 21:45:14
【问题描述】:

我正在开发一个从套接字接收数据的程序,当发送信号时,我希望能够中断接收。

我现在拥有的:

class Killer: 
    die = False
    def __init__(self):
        signal.signal(signal.SIGINT, self.terminate)
        signal.signal(signal.SIGTERM, self.terminate)

    def terminate(self, signum, frame):
        print ("caught " + str(signum))
        self.die = True;

sock = socket.socket()
# Generic socket setup

while (~killer.die):
    #generic data setup
    sock.receive(data)

sock.shutdown(socket.SHUT_RDWR)

当中断被捕获时,它会打印然后返回等待。

有没有办法在接收到信号时中断接收?

【问题讨论】:

    标签: python sockets signal-handling


    【解决方案1】:

    从 Python 3.5 开始,在调用 (Python) 信号处理程序后,中断的系统调用为 automatically resumed。如果您不想这样,请在处理程序中引发异常。

    【讨论】:

    • 这是处理它的'coreect'方式吗?这似乎有点骇人听闻
    • @BrydonGibson:是的,你就是这样做的:查看 PEP。这只是语言的一部分(现在)EINTR 处理发生在一个阻塞调用中,而不是在它们两个之间。
    • 啊,这样解释更有意义,谢谢!
    猜你喜欢
    • 2012-08-01
    • 1970-01-01
    • 2019-01-26
    • 1970-01-01
    • 1970-01-01
    • 2016-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多