Redis
 sql >> Base de données >  >> NoSQL >> Redis

Comment implémenter la fonctionnalité de délai d'attente pubsub de Redis ?

Parce que vous n'êtes pas en train de threader (et je suppose que c'est intentionnel et dans certains cas judicieux), vous devez utiliser un type d'interruption. Les signaux sont un type d'interruption sur les systèmes Unix pour vous permettre de revenir à un rappel lors d'un appel qui pourrait bloquer.

Cet exemple de fichier ouvert qui ne reviendra jamais correspond à ce que vous souhaitez faire. Il est tiré de http://docs.python.org/library/signal.html#module-signal

Mais un avertissement. Étant donné que Python utilise un verrou d'interpréteur global pour effectuer la gestion des signaux du système d'exploitation, il est sujet à certains problèmes de stabilité. Ces problèmes devraient cependant être rares normalement.

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