导航:首页 > 编程语言 > python等一段时间再执行

python等一段时间再执行

发布时间:2024-06-26 22:21:31

python 处理大数据程序运行的越来越慢的问题

最近编写并运行了一个处理1500万个数据的程序,本来最初每秒可以处理150个左右的数据,预计大概15个小时的时间就可以处理完,晚上的时候就开始运行,本以为等到第二天中午就可以得到结果呢,,,

可是,等我第二天的时候一看,什么???还没处理完,当前的数据处理速度变成了一秒5个左右,然后还需要等待300个小时。

然后就查了一下这个问题,原来同样也有很多人在处理大数据的时候遇到了这个问题,大多数的文章分析的原因都是说由于GC(垃圾回收)造成的性能下降。
Python的垃圾回收机制的工作原理为每个对象维护一个引用计数,每次内存对象的创建与销毁都必须修改引用计数,从而在大量的对象创建时,需要大量的执行修改引用计数操作,对于程序执行过程中,额外的性能开销是令人可怕的。回收的触发时机有两种可能,一是用户主动调用gc.collect(),二是对象数量超过阈值。

所以正是GC拖慢了程序的性能,所以我们可以考虑在处理的时候禁止垃圾回收。

通过这样的改进之后速度确度会有很大的提升。但是又有也会另外的一个问题,内存溢出,由于运行的过程中生成大量的对象,一次使用后就没有了引用,由于关闭了垃圾回收机制,一直存在内存中得不到清理,然后程序的内存使用量越来越大。解决的方法就是定期打开gc.enable()再关闭或者主动调用gc.collect(),这样就可以了。

通过上述的改进后程序确实了很多,可是我的程序还是运行的越来越慢,我都怀疑人生了,然后分别测试了各个步骤所花费的时间才知道了原因,我使用了pandas创建一个DataFrame,然后每次迭代得到的结果都添加新的数据到DataFrame中,随着里边的数据越来越多,添加的速度也就越来越慢了,严重的拖累的运行速度。这里的解决方法有两个:

1 分段保存结果,间隔一段时间就保存一次结果,最后再将多次的结果合并。

2 换一个数据存储方法,我是直接使用了python的字典进行保存结果,它随着数据的增多添加的速度也会变慢,但是差别不是很大,在可接受的范围内,可以使用;或者再加上方法1,分段进行保存再合并也是可以的。

② 如何让python程序每个一段时间执行一次

def func_new(self):
self.timerNew = threading.Timer(1, self.func_new)//每隔1秒运行

③ python多线程为什么会暂停一下,再接着跑 跑一段时间,会暂停几秒钟,然后接着打印。

线程之间的输出,需要在池中中转,死循环的时间长了,出现满栈的概率提高,外在表现就是卡一会儿

④ Python写每隔一段时间就运行一次的任务,怎么写比较好

#coding=utf-8
#usingpython2.7
importtime
start_job=True
whilestart_job:
#dosomethinghere.
print1#这里改成你想做的任务
time.sleep(60)#每隔一分钟执行一次print任务,sleep里的参数按秒算

阅读全文

与python等一段时间再执行相关的资料

热点内容
pdf能修改内容吗 浏览:386
贷款办下来不给解压 浏览:141
德国顶级编程思路 浏览:852
Flt单片机 浏览:476
ami和hdb3编译码对比 浏览:665
纯手工制作解压视频 浏览:119
云职教APP为什么收不到验证码 浏览:697
礼品发包网源码 浏览:569
什么app上能制图 浏览:86
为什么代理服务器没响应 浏览:562
小程序编译提示 浏览:824
nameerrorpython 浏览:294
辞典pdf下载 浏览:801
遗传算法违反约束路径数目 浏览:177
少年班中的古人算法 浏览:931
什么app一键p图好看 浏览:573
查询手机连上电脑的命令 浏览:850
javasftp实现 浏览:369
源码升级的意思 浏览:399
缓解压力手势图片下载 浏览:96