是否有可能检测到 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/