导航:首页 > 编程语言 > 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等一段时间再执行相关的资料

热点内容
公开密钥加密哪年 浏览:829
程序员向 浏览:469
鼠标指针压缩包下载 浏览:762
登录认证失败请检查账号服务器地址 浏览:737
解压游戏覆盖方式 浏览:533
遗传算法的变异算子怎么实现 浏览:685
spring如何添加app 浏览:664
python循环import 浏览:552
怎样把js代码加密 浏览:800
frp服务器百度云 浏览:792
12306算法 浏览:630
单片机驱动小马达 浏览:100
pythoncookbook27 浏览:518
c的指针和python 浏览:186
python写sftp 浏览:957
读文pdf 浏览:507
pythonnumpy内积 浏览:782
linux硬盘模式 浏览:15
怎么查安卓的空间 浏览:589
linux命令复制命令 浏览:116