报错 too many connections

报错 too many connections

from redis_db import pool
import redis
import random
from concurrent.futures import ThreadPoolExecutor

s = set()
while True:
   if len(s) == 1000:
       break
   n = random.randint(10000, 100000)
   s.add(n)

con = redis.Redis(
   connection_pool=pool
)

try:
   con.delete("kill_total", "kill_num", "kill_flag", "kill_user")
   con.set("kill_total", 50)
   con.set("kill_num", 0)
   con.set("kill_flag", 1)
   con.expire("kill_flag", 600)
except Exception as e:
   print(e)
finally:
   del con

executor = ThreadPoolExecutor(200)


def buy():
   connection = redis.Redis(
       connection_pool=pool
   )

   pipline = connection.pipeline()

   try:
       if connection.exists("kill_flag") == 1:
           pipline.watch("kill_num", "kill_user")
           total = int(pipline.get("kill_total").decode("utf-8"))
           num = int(pipline.get("kill_num").decode("utf-8"))
           if num < total:
               pipline.multi()
               pipline.incr("kill_num")
               user_id = s.pop()
               pipline.rpush("kill_user", user_id)
               pipline.execute()
   except Exception as e:
       print(e)
   finally:
       if 'pipline' in dir():
           pipline.reset()
       del con


for i in range(0, 1000):
   executor.submit(buy)

print("秒杀已经结束!")

正在回答

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

2回答
好帮手慕美 2019-06-12 20:02:52

同学,你好,"too many connections"不是程序报错提示信息,属于Redis的日志提示。同学可以看下Redis数据库中的字段kill_user为50条记录和kill_num值为50即表示秒杀是成功的。关于提示信息可在捕获异常后不进行打印输出。

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

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

问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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