怎么分析pymysql非线程安全导致的故障
今天就跟大家聊聊有关怎么分析pymysql非线程安全导致的故障,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。
mysqldb 这个python 驱动只支持到 python 2 .
转到python 3 后. 无法使用了.
启用 pymysql 这个驱动.
在投入生产后, 发现了一些问题.
在使用较大规模的 for id in [list]:
db.query (xxxxxxxxx)
查询数据库的时候, 出现了一些比较奇怪的网络连接层面的报错.
数据报 的 头字节 格式错误.
如果只是执行单个查询则是不会报错.
经过排查, 发现这是pymysql 的bug 或者缺陷.
即 PYmysql 不是线程安全的. 由于我们自己的组件 dba模块.
对数据库查询做了包装.
导致 在某些情况情况下. python 的代码优化模块.
对代码的优化, 出现了并行的情况.
即前一个sql 查询没有返回的情况下, 另一个线程启动了并从同一个数据库句柄读取数据.
导致了 数据报的格式错误.
改进方案:
对数据库的连接 增加线程锁.
每一次查询 都加锁. 在异常处理中也要同时加上解锁代码.
更换为mysql.com 提供的 官方的 mysql-connector-python 驱动. 目前没有发现问题.
看完上述内容,你们对怎么分析pymysql非线程安全导致的故障有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注编程网行业资讯频道,感谢大家的支持。
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341