php-world 2023-07-10 21:22 采纳率: 0%
浏览 12

python利用连接池查询,间歇性查询慢

在python3 中 使用from dbutils.pooled_db import PooledDB
基本配置如下


```python

 def __init__(self,):
        self.pool = PooledDB(
            creator=pymysql,  # 使用链接数据库的模块
            mincached=10,  # 初始化时,链接池中至少创建的链接,0表示不创建
            maxconnections=200,  # 连接池允许的最大连接数,0和None表示不限制连接数
            blocking=True,  # 连接池中如果没有可用连接后,是否阻塞等待。True,等待;False,不等待然后报错
            host=host,
            port=port,
            user=user,
            password=password,
            database=database,
            #connection_timeout=600,
            read_timeout=600,
            write_timeout=600,
            ping= 0,

        )

查询代码
count = 300
while True:
    dump("开始执行",2)
    t1 = time.time()
    sql = "select id,num,name, buy_rmb,buy_num,stock_user,sell_rmb,order_id,status from `record` where id = '1165'"
    data = mysql.select_one(sql)
    print(data)
    t2 = time.time()
    dump("耗时:%s"%(t2-t1),2)

    dump("等待%s秒,再次查询 "%(count), 2)
    time.sleep(count)

查询日志
2023-07-10 21:11:11.351 开始执行
{'id': 1165, 'num': '600748', 'name': '上实发展', 'buy_rmb': Decimal('4.14'), 'buy_num': 4500, 'stock_user': '信用29295', 'sell_rmb': Decimal('4.26'), 'order_id': '672137607', 'status': 2}
2023-07-10 21:11:11.379 耗时:0.0279998779296875
2023-07-10 21:11:11.379 等待300秒,再次查询 
2023-07-10 21:16:11.380 开始执行
{'id': 1165, 'num': '600748', 'name': '上实发展', 'buy_rmb': Decimal('4.14'), 'buy_num': 4500, 'stock_user': '信用29295', 'sell_rmb': Decimal('4.26'), 'order_id': '672137607', 'status': 2}
2023-07-10 21:16:30.641 耗时:19.261474132537842
2023-07-10 21:16:30.641 等待300秒,再次查询 
 创建连接池,程序每间隔5分钟查询一次数据库,首次查询就非常快,0.02秒就可以完成,如果间隔300秒再查询,就需要约20秒才能完成,
如果连续查询就不会出现延时20秒这种情况,数据库只有几百条记录。同一时间用其他客户端执行sql语句,也是0.02秒左右就完成了。

唯独在python中,只要间隔超过300秒,首次查询就比较慢了。
  • 写回答

2条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-07-11 08:37
    关注
    不知道你这个问题是否已经解决, 如果还没有解决的话:
    • 这篇博客: 解决新版DBUtils使用连接池from DBUtils.PooledDB import PooledDB报错中的 解决方法 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

      将下面的代码:

      from DBUtils.PooledDB import PooledDB
      import pymysql
      
      pool = PooledDB(pymysql, 5, **{
          "user": 'root',
          "password": '123456',
          "db": "test_db",
      })
      

      改为:

      from dbutils.persistent_db import PersistentDB
      import pymysql
      
      pool = PersistentDB(pymysql, 5, **{
          "user": 'root',
          "password": '123456',
          "db": "test_db",
      })
      

    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

问题事件

  • 创建了问题 7月10日

悬赏问题

  • ¥15 C++ yoloV5改写遇到的问题
  • ¥20 win11修改中文用户名路径
  • ¥15 win2012磁盘空间不足,c盘正常,d盘无法写入
  • ¥15 用土力学知识进行土坡稳定性分析与挡土墙设计
  • ¥70 PlayWright在Java上连接CDP关联本地Chrome启动失败,貌似是Windows端口转发问题
  • ¥15 帮我写一个c++工程
  • ¥30 Eclipse官网打不开,官网首页进不去,显示无法访问此页面,求解决方法
  • ¥15 关于smbclient 库的使用
  • ¥15 微信小程序协议怎么写
  • ¥15 c语言怎么用printf(“\b \b”)与getch()实现黑框里写入与删除?