Watched variable changed. 错误提示

正在回答

登陆购买课程后可参与讨论,去登陆

1回答

同学,你好。

1、Watched variable changed:watch 执行之后, execute执行之前, 有其他客户端修改了 watch 中指定的key的值, 程序的事务就会抛出异常 redis.WatchError。

线程池的任务是并发执行的,当一个线程执行完毕后或因阻塞性任务而让出CPU的使用权后,会马上执行另一个的线程,这种执行原则是无序的,类似与Python的多线程,当一个线程执行完毕后会返回对应线程的执行结果。正因为并发执行线程池中的任务,所以在Redis中事务管理需要对目标数据进行“监视”,即:“Watched variable changed”,从而有效的避免其他线程对目标数据进行“非法”修改。

如果我的回答解决了您的疑惑,请采纳!祝学习愉快~~~~


  • 萧大侠 提问者 #1
    老师好,我在RedisDesktopManager,创建kill_flag、kill_num、kill_total、kill_user的Value均符合预期,但是在执行是一值抛出异常:Watched variable changed。排查了一遍,其他客户端并未有修改watch中的key。而且是根据视频教程进行的演练的。 所以请教下,如何解决在Pycharm执行过程中,报错的情况。
    2020-05-07 15:42:16
  • 好帮手慕美 回复 提问者 萧大侠 #2
    同学,你好。线程池的任务是并发执行的,无法看到线程中具体执行程序的过程,因此无法判定是否其他线程修改了watch中的key。当watch的数据没有被别人修改过时,则修改成功,否则就修改失败了;抛出该异常是正常的,在程序中捕获到了该异常并进行了输出,因此控制台会输出该内容,是没影响的。祝学习愉快~~~~
    2020-05-07 17:53:06
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师