【发布时间】:2016-03-03 15:15:59
【问题描述】:
我有一个非常简单的 Python 脚本。它启动了一个由 10 个进程组成的池,每个进程:
- 为 1000 条记录发出外部 API 请求
- 解析 XML 响应
- 将每条记录插入 MySQL 数据库
这里没有什么特别棘手的地方,但是当我达到 90,000 条记录时,脚本会挂起。
mysql> show processlist;
+----+------+-----------------+---------------+---------+------+-------+------------------+
| Id | User | Host | db | Command | Time | State | Info |
+----+------+-----------------+---------------+---------+------+-------+------------------+
| 44 | root | localhost:48130 | my_database | Sleep | 57 | | NULL |
| 45 | root | localhost:48131 | NULL | Sleep | 6 | | NULL |
| 59 | root | localhost | my_database | Sleep | 506 | | NULL |
| 60 | root | localhost | NULL | Query | 0 | NULL | show processlist |
+----+------+-----------------+---------------+---------+------+-------+------------------+
我有大约一百万条记录要导入,所以我还有很长的路要走。
我可以做些什么来防止这种挂起并保持我的脚本移动?
Python 2.7.6
MySQL-python 1.2.5
【问题讨论】:
-
您连接数据库的方式和频率如何? (即,您是否在做一些愚蠢的事情,例如为每个记录写入建立单独的数据库连接?)
-
看看脚本会有帮助。
-
@JohnGordon 原来没有。我在脚本开始时打开连接,在脚本结束时完成工作并关闭连接。我只是尝试打开和关闭每个操作的连接(愚蠢的东西),实际上这让我更进一步。
-
可能是外部 API 限制了您的请求?您的脚本是否在 API 读取、XML 解析或 DB 写入时挂起?
-
数据库写入是问题所在,但到目前为止,在有限的测试中,当我边走边打开和关闭时,它似乎不是问题。我讨厌这样做,但也许我可以调整一个超时设置。我会调查的。我很确定这是一个 MySQL 问题(不是 Python),但我想在帖子中包含上下文。
标签: python mysql python-2.7