执行代码后提示too many connections 和watched variable changed

执行代码后提示too many connections 和watched variable changed

1
#coding:utf-8<br><br>from concurrent.futures import ThreadPoolExecutor<br>from redis_db import pool<br>import redis<br>import random<br><br>s=set()<br>while True:<br>    if len(s)>=1000:<br>        break<br>    num=random.randint(10000,100000)<br>    s.add(num)<br><br>con=redis.Redis(<br>    connection_pool=pool<br>)<br><br>try:<br>    con.delete("kill_total","kill_num","kill_flag","kill_user")<br>    con.set("kill_total",50)<br>    con.set("kill_num",0)<br>    con.set("kill_flag",1)<br>    con.expire("kill_flag",600)<br>except Exception as e:<br>    print(e)<br>finally:<br>    del con<br><br>executor = ThreadPoolExecutor(200)<br><br>def buy():<br>    connection = redis.Redis(connection_pool=pool)<br>    pipline = connection.pipeline()<br>    try:<br>        if connection.exists("kill_flag") == 1:<br>            pipline.watch("kill_num", "kill_user")<br>            total = int(pipline.get("kill_total").decode("utf-8"))<br>            num = int(pipline.get("kill_num").decode("utf-8"))<br>            if num<total:<br>                pipline.multi()<br>                pipline.incr("kill_num")<br>                user_id=s.pop()<br>                print(user_id)<br>                pipline.rpush("kill_user",user_id)<br>                pipline.execute()<br>    except Exception as e:<br>        print(e)<br>    finally:<br>        if "pipline" in dir():<br>            pipline.reset()<br>        del connection<br><br>for i in range(1000):<br>    executor.submit(buy)<br><br>print("秒杀已经结束")<br>

https://img1.sycdn.imooc.com//climg/61381af309b36cda13700987.jpg

正在回答

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

1回答

同学,你好!

1、出现too many connections是因为redis_db中的pool在建立时有一个参数max_connections,这个参数是最大连接数。若参数的值设置的过小,就会提示too many connections,需要改大一些,例如200,如下图

http://img1.sycdn.imooc.com//climg/5eb1289a09c2d5c102790142.jpg

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

祝学习愉快!

  • 为什么老师电脑演示里没有出现这些,用的是一样的代码

    2021-12-21 16:36:07
  • 同学,你好!

    出现以上信息是因为最大连接数设置太少的原因,导致连接不够用,同学可以将最大连接数改大,如下图:

    https://img1.sycdn.imooc.com//climg/61c198c409b9c4dd05630570.jpg

    祝学习愉快~

    2021-12-21 17:06:50
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

0 星
请稍等 ...
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

在线咨询

领取优惠

免费试听

领取大纲

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