Python 在Queue.Queue.get()中被阻止时处理SIGTERM

Python 在Queue.Queue.get()中被阻止时处理SIGTERM,python,multithreading,queue,signals,Python,Multithreading,Queue,Signals,我有一个程序,通常在读取队列时被阻止。队列。在程序中,我为SIGTERM定义了一个信号处理程序,但它似乎忽略了它 对于我拥有的其他没有被队列阻塞的程序,这种方法是有效的 是否有方法捕获SIGTERM?我知道,添加超时可以解决这个问题,但是这会增加CPU使用率,我负担不起。似乎没有办法,只能在无休止的循环中使用超时,或者可能使用queue.queue的替代实现(我不知道是否有)。你并不是唯一一个面对这个问题的人;我打了,其他几个人(,)也打了 我相信您知道如何实现轮询,但我想我会加入我的解决方案:

我有一个程序,通常在读取
队列时被阻止。队列
。在程序中,我为
SIGTERM
定义了一个信号处理程序,但它似乎忽略了它

对于我拥有的其他没有被队列阻塞的程序,这种方法是有效的


是否有方法捕获
SIGTERM
?我知道,添加
超时可以解决这个问题,但是这会增加CPU使用率,我负担不起。

似乎没有办法,只能在无休止的循环中使用
超时,或者可能使用
queue.queue
的替代实现(我不知道是否有)。你并不是唯一一个面对这个问题的人;我打了,其他几个人(,)也打了

我相信您知道如何实现轮询,但我想我会加入我的解决方案:

while 1:
    try:
        new_item = my_queue.get(timeout=1.0)
    except queue.Empty:
        pass
    else:
        break

我当时正在这么做,但超时=一年。然而,每隔一段时间,这个程序就会占用1%的CPU,而且我有数千个CPU在运行。有一天,我随机发现Python3解决了这个问题,但我必须坚持使用2.7。