是否可以检测brpoplpush何时发生并记录事件?

时间:2016-01-26 13:08:21

标签: python events redis

是否有可能检测到redis中发生brpoplpush的时间是什么时候做了什么?在我的情况下,我只想在我们的日志中添加一个注释。

在我改变之前,python worker剪断如下

 while True:
    _redis.brpoplpush(global_waiting_queue, local_waiting_queue)
    logger.info("Moving job from global queue (%s) to local queue (%s)", global_waiting_queue, local_waiting_queue)

我想添加一个心跳功能,以便我可以监控我的工作人员。

 while True:
   _redis.brpoplpush(global_waiting_queue, local_waiting_queue, 5)
   queue_worker_heartbeat(_redis, queue_worker_key)

可以按照以下几行做点什么

   while True:
     action = _redis.brpoplpush(global_waiting_queue, local_waiting_queue, 5)
    if action:
      logger.info("Moving job from global queue to local queue")
    queue_worker_heartbeat(_redis, queue_worker_key)

1 个答案:

答案 0 :(得分:1)

您可以使用keyspace notifications

收到通知

默认情况下,此功能已禁用。 要激活列表事件通知,您应在redis配置文件中设置以下行:

notify-keyspace-events "Kl"

' K'意味着您希望不被通知密钥空间事件,' l'列表事件。

BRPOPLPUSH生成一个rpop事件和一个lpush事件:

__keyspace@0__:myotherlist lpush
__keyspace@0__:mylist rpop

要收到通知,您必须订阅频道

psubscribe '__key*__:*'

它会向您发送以下事件:

   __keyspace@0__:mykey rpop
   __keyspace@0__:rpop mykey 

您可以使用更精确的模式缩小通知范围。例如:

psubscribe '__keyspace@0__:mykey'

只有当命令应用于密钥“mykey”时才会通知您。在数据库0中。