Redis
 sql >> Datenbank >  >> NoSQL >> Redis

Wie implementiert man die Pubsub-Timeout-Funktion von Redis?

Da Sie kein Threading durchführen (und ich gehe davon aus, dass dies beabsichtigt und in einigen Fällen sinnvoll ist), müssen Sie eine Art Interrupt verwenden. Signale sind eine Art Interrupt auf Unix-Systemen, die es Ihnen ermöglichen, während eines Anrufs, der blockieren könnte, zu einem Rückruf zurückzukehren.

Dieses Beispiel einer geöffneten Datei, die niemals zurückkehren wird, entspricht dem, was Sie tun möchten. Es stammt von http://docs.python.org/library/signal.html#module-signal

Aber eine Warnung. Da Python eine globale Interpretersperre verwendet, um die Verarbeitung von Betriebssystemsignalen durchzuführen, unterliegt es einigen Stabilitätsproblemen. Diese Probleme sollten normalerweise jedoch selten sein.

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