Catch Keyboard Interromper para impedir que o trabalhador de multiprocessamento do Python trabalhe na fila

De vários posts encontrados no stackoverflow eu criei este código.

Cenário

Eu quero ter um multiprocessing.queue em que vários trabalhadores "ouvir"

No caso de uma interrupção do teclado, o processo principal não deve mais colocar novos itens na fila e, com a ajuda dos objetos sentinela, o trabalhador deve ser interrompido normalmente.

Problema

Meu problema com a versão atual onde eu uso

signal.signal(signal.SIGINT, signal.SIG_IGN) 

Ignorar o Ctrl + C é que ele também é ignorado pelo processo principal.

Alguma ideia ? Preciso usar o pool de trabalho de multiprocessamento? Alguns exemplos indicam que talvez precise. Eu ainda posso usar a fila?

from multiprocessing import Pool, Process,Queue
import time
import signal
# http://docs.python.org/3.1/library/multiprocessing.html#multiprocessing.Queue
# http://docs.python.org/3.1/library/multiprocessing.html#multiprocessing.Process


class Worker(Process):
    def __init__(self, queue,ident):
        super(Worker, self).__init__()
        # Ignore Signals
        signal.signal(signal.SIGINT, signal.SIG_IGN)
        self.queue= queue
        self.idstr= str(ident)
        print "Ident" + self.idstr

    def run(self):
        print 'Worker started'
        # do some initialization here

        print 'Computing things!'
        for data in iter( self.queue.get, None ):
            print "#" + self.idstr + " : " + str(data)
            time.sleep(5)
            print "#" + self.idstr + "Queue Size: " + str(self.queue.qsize())

        print "Worker Done"

#### Main ####
request_queue = Queue(10)

for i in range(4):
    Worker( request_queue,i ).start()

try:
    for data in range(1000000):
        request_queue.put( data )
        #print "Queue Size: " + str(request_queue.qsize())
        # Sentinel objects to allow clean shutdown: 1 per worker.
    for i in range(4):
        request_queue.put( None ) 

except KeyboardInterrupt:
    print "Caught KeyboardInterrupt, terminating workers"
    while  request_queue.empty()==False:
         request_queue.get()
    request_queue.put( None )    

questionAnswers(2)

yourAnswerToTheQuestion