Redis
 sql >> Database >  >> NoSQL >> Redis

Come implementare la funzione di timeout pubsub di redis?

Poiché non stai eseguendo il threading (e presumo che sia intenzionale e in alcuni casi saggio) devi utilizzare un tipo di interrupt. I segnali sono un tipo di interruzione sui sistemi Unix per consentire di tornare a una richiamata durante una chiamata che potrebbe bloccarsi.

Questo esempio di un file aperto che non verrà mai restituito è in linea con quello che vuoi fare. È tratto da http://docs.python.org/library/signal.html#module-signal

Ma un avvertimento. Poiché Python utilizza un Global Interpreter Lock per eseguire la gestione del segnale del sistema operativo, è soggetto ad alcuni problemi di stabilità. Questi problemi dovrebbero essere rari normalmente però.

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