如何从Python中的信号处理程序中断阻塞的系统调用函数?

时间:2019-01-06 15:19:16

标签: python multithreading system-calls blocking signal-handling

我有一个从主线程生成的线程,该线程基本上具有一个无限循环,具有系统阻塞功能:

def run(self):
    global EXIT
    while not EXIT:
        data = self.conn.recv(1024)
        ...

我已经为SIGINT定义了信号处理程序

def sig_handler(signum, frame):
    global EXIT, threads
    if (signum == 2):#defensive
        print("Called SIGINT")
        EXIT = True

由于信号被主线程捕获,因此中断了主线程。但是另一个线程卡在了阻塞函数上:有没有办法在python中中断系统调用阻塞函数,以便退出该函数?

我不想直接停止SIGINT正常运行的过程,但是我只是想中断recv,以使while的条件不再成立,因此我可以在退出之前做其他事情

0 个答案:

没有答案