sql >> Base de Datos >  >> NoSQL >> Redis

¿Cómo implementar la función de tiempo de espera de pubsub de redis?

Debido a que no está enhebrando (y supongo que esto es intencional y, en algunos casos, inteligente), debe usar un tipo de interrupción. Las señales son un tipo de interrupción en los sistemas Unix que le permiten regresar a una devolución de llamada durante una llamada que podría bloquearse.

Este ejemplo de un archivo abierto que nunca volverá está en línea con lo que desea hacer. Está tomado de http://docs.python.org/library/signal.html#module-signal

Pero una advertencia. Debido a que Python usa un bloqueo de intérprete global para realizar el manejo de la señal del sistema operativo, está sujeto a algunos problemas de estabilidad. Sin embargo, estos problemas deberían ser raros normalmente.

import signal, os

def handler(signum, frame):
    print 'Signal handler called with signal', signum
    raise IOError("Couldn't open device!")

# Set the signal handler and a 5-second alarm
signal.signal(signal.SIGALRM, handler)
signal.alarm(5)

# This open() may hang indefinitely
fd = os.open('/dev/ttyS0', os.O_RDWR)

signal.alarm(0)          # Disable the alarm