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

标签 python events redis

是否有可能检测到 redis 中何时发生了 brpoplpush 并在发生时采取措施?就我而言,我只想在我们的日志中添加一条注释。

在我改变之前,python worker snipped 如下所示

 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)

最佳答案

您可以使用 keyspace notifications 获得通知

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

notify-keyspace-events "Kl"

'K' 表示您希望收到键空间事件的通知,'l' 表示列表事件。

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

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

要收到通知,您必须订阅该 channel

psubscribe '__key*__:*'

它将向您发送如下事件:

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

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

psubscribe '__keyspace@0__:mykey'

将确保仅当命令应用于数据库 0 中的键“mykey”时才会通知您。

关于python - 是否可以检测 brpoplpush 何时发生并记录事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35014571/

相关文章:

python - 用来自单个类中的 2 个类的语句包装 python

python - 如果存在某些值,如何重新分配具有重复值的列的值?

python - 'Conda' 未被识别为内部或外部命令

python - 为什么 numpy 比 python 慢?如何让代码执行得更好

ruby-on-rails - 无法使用NodePort服务连接到Kubernetes中的Redis Pod

python - 如何设置事件调度程序来检查给定 Mysql 表中是否有新行

javascript - 使用 JavaScript 处理表单中的多个提交按钮

javascript - 启用 mouseup/mousedown 但防止点击行为

redis - 如何实现带超时的ServiceStack Redis Client

ruby-on-rails - 在初始化时配置 Redis 连接