我的 python 脚本执行时间长了,他就卡着不动,好久才动一次

2015-07-05 01:58:39 +08:00
 qq2549112

写了个脚本, 用来拉取远程服务器上的数据,然后存入本地,

然后我 执行 python get1.py

拉取了才5w多

脚本就卡了 不动

要好几分钟才动一下

我以为是远程数据库挂了,于是新开一个窗口执行 python get1.py 速度飞快

那就正面 不是远程 和本地数据库的问题

是终端窗口 内存用光了吗

可是我的脚本 就是要让他长期运行呀,这才拉了几万个记录,就卡成这样了

那我有好几十万的数据量 怎么办呀

大家有解决办法吗

7249 次点击
所在节点    问与答
17 条回复
qq2549112
2015-07-05 02:23:07 +08:00
经过简单排查, 发现是 查询语句 获取结果 速度很慢

查询 到了5w多, 继续查询的话,获取数据的时间会很长, 应该不可能是网络问题

因为我新开终端 再次运行这个脚本,他跑的很快

我猜测,是不是远程数据库 因为 这个连接查询的数据量太多了,所以 需要休息 太累了
20015jjw
2015-07-05 03:11:18 +08:00
试试查询的时候给一个timeout呢
Gandum
2015-07-05 06:45:32 +08:00
上代码
kenken
2015-07-05 07:37:06 +08:00
talk is cheap, show me the code
qq2549112
2015-07-05 12:22:28 +08:00
@Gandum
@kenken
谢谢
我的代码是这个 http://paste.ubuntu.com/11824534/ 从代码上来看 应该是没有问题 ,后来我加了个判断, 就是offset 可以整除10000的时候 就休息10秒 [也就是每次同步1w个数据,就休息10秒] , 但还是不行,还是会在5w左右的数据量 出现卡住的情况

而且每次都在 5w左右 卡住

所以我现在怀疑是远程数据库 做了什么限制

但是我不知道怎么办了
benjiam
2015-07-05 12:59:16 +08:00
为什么不在5万以后断开继续
qq2549112
2015-07-05 13:15:52 +08:00
@benjiam 谢谢提醒,那我试试这个方法 嘿嘿
imn1
2015-07-05 13:17:07 +08:00
如果总是在固定数量出现问题,多数是
1.远端某个环节有数量限制
2.内存
3.到特定某条数据有问题

如果是数据库的问题,只能自己解决
在代码的不同运行阶段,适当加一些delete语句,把不再使用的大数据变量扔给GC自动回收
远程要用 IP
那个for可以改成表达式
最好拖数据和数据处理分开,拖到本地再处理,不要处理完再拖
多进程拖
qq2549112
2015-07-05 13:28:17 +08:00
@imn1 谢谢,我的for 改成什么表达式呀, 我是新手哦,我觉得for 好像是比较正常的

这个托数据以后,处理也很简单的, 也就是插入到本地另一个数据库 ,不耽误时间的
imn1
2015-07-05 13:34:29 +08:00
@qq2549112
生成器表达式、列表表达式、字典表达式~
去看看书吧,表达式比循环使用更少资源,更快,大量数据区别很明显
qq2549112
2015-07-05 13:46:55 +08:00
@imn1 谢谢
lucky2touch
2015-07-05 15:35:10 +08:00
你这需求是做增量备份?不知道原表是如何设计的,排序的消耗是很大的,除了索引之外,类似的处理方法从设计上来说还有表分区啥的。
Gandum
2015-07-05 15:59:35 +08:00
这个代码应该没啥问题,不如每5W的时候就close,然后再重建连接试试?
Gandum
2015-07-05 16:04:13 +08:00
反正肯定不是内存问题,python在你不引用的时候会自动进行垃圾收集
qq2549112
2015-07-05 16:08:21 +08:00
@lucky2touch 谢谢,需求是 实时的增量备份到另外一个数据库 [mysql to postgresql]

我重新发了个帖子, http://www.v2ex.com/t/203463

感谢前辈
wy315700
2015-07-05 16:08:32 +08:00
你给时间戳加一个索引看看
qq2549112
2015-07-05 16:08:52 +08:00
@Gandum 谢谢 现在我找到问题所在了,是数据库的问题 我重新发了个帖子, http://www.v2ex.com/t/203463

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/203384

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX