脚本并发的记录

目录

脚本并发优化笔记。

目标

批量读取几十万条客户端 IP,查询 IP 库获取位置和运营商信息,更新回数据库。

问题

单进程单线程:每秒仅完成 1 条数据更新,速度太慢。

方法一:脚本并发

多进程 vs 多线程?逻辑不是计算密集型,瓶颈在 IP 库查询和数据库更新,选择多线程。

尝试 6 线程并发,性能提升,但 show processlist 发现:

  • 6 个 UPDATE 中仅 1 个实际在 updating
  • 其他 5 个都在 locked 等待锁

结论:数据库并发成为瓶颈。

方法二:数据库引擎升级

修改表引擎为 InnoDB(原为 MyISAM),支持行级锁。

结果:6 线程并发,每秒更新 5.8~7.5 条(相比单线程 0.57 条,提升 10 倍)。

对比结果

方案性能
单进程单线程0.57 条/秒
多进程(4进程)1.08~2.38 条/秒(不稳定)
多线程(6线程)+ InnoDB5.8~7.5 条/秒

#python #mysql