使用Python设置tmpfs来加速项目的教程


Posted in Python onApril 17, 2015

 对我当前工程进行全部测试需要花费不少时间。既然有 26 GB 空闲内存,为何不让其发挥余热呢? tmpfs 可以通过把文件系统保存在大内存中来加速测试的执行效率。

但优点也是缺点,tmpfs 只把结果保存在内存中,所以你必须自己编写脚本来把结果回写到磁盘上进行保留。而且这些脚本必须良好书写和执行,否则就要失去部分或全部的工作成果了。

一种常见的方法是直接在tmpfs文件夹中工作,然后把工作成果备份到磁盘上的一个文件夹中。当您的机器启动时你从那个备份文件夹恢复tmpfs文件夹。启动之后用cron同步tmpfs文件夹和磁盘文件夹。

我发现这个设置有点复杂容易出错。在启动的时候,或者对于crom,我从没有真正的相信。现在我用一种简单得多的设置,根本不用cron。

在我的机器上运行一个单项测试,使用IDE并发布于web服务器,其性能通常是合理的,只有运行全部测试需要许多时间。

我发现最佳之处是在磁盘上设置一个workspace,与/dev/shmand目录下运行所有测试的tmpfs同步。这或多或少使我的设置无需改变,并消除了可能松散的工作,这些仅仅是因为我在正确设置方面太垃圾了。

性能提升的结果是合理的:
 

$ nosetests && run_tests.py
........................................................................................................................................................................................................................................................
----------------------------------------------------------------------
Ran 248 tests in 107.070s
 
OK
........................................................................................................................................................................................................................................................
----------------------------------------------------------------------
Ran 248 tests in 19.423s
 
OK

现在比原来提高了 5 倍速度。

使用 python 来进行设置非常简单:
 

#!/bin/bash -e
 
WORK=src/py
LOG=$(pwd)/test.log
TARGET=$(hg root)
SHADOW=/dev/shm/shadow/$TARGET
 
date > $LOG
mkdir -p $SHADOW
 
cd $SHADOW
rsync --update --delete --exclude=".*" --exclude=ENV --archive $TARGET ./..
 
if [ ! -d ENV ]
then
  virtualenv ENV
fi
. ENV/bin/activate
 
cd $WORK
python setup.py develop >> $LOG
nosetests $* | tee -a $LOG
exit ${PIPESTATUS[0]}

我只要重复同步到/dev/shm目录,设置测试环境(virtualenv and python setup.PY)和运行测试(nosetests)。

在tmpfs文件夹里仍可用命令行运行单个测试。也可以把这个从你的IDE中踢走,但你会失去你的测试运行和调试的能力。如我之前所说,我现在不需要这些。

我希望我对tmpfs的这个变通使用能帮助你建立一个更快速的开发环境,而无须遭受所有的脚本麻烦。

Python 相关文章推荐
python每隔N秒运行指定函数的方法
Mar 16 Python
编写简单的Python程序来判断文本的语种
Apr 07 Python
python基于xmlrpc实现二进制文件传输的方法
Jun 02 Python
Python实现模拟登录及表单提交的方法
Jul 25 Python
Python 网页解析HTMLParse的实例详解
Aug 10 Python
详解python中的线程
Feb 10 Python
python实现m3u8格式转换为mp4视频格式
Feb 28 Python
Python使用MyQR制作专属动态彩色二维码功能
Jun 04 Python
Python3实现zip分卷压缩过程解析
Oct 09 Python
tensorflow实现tensor中满足某一条件的数值取出组成新的tensor
Jan 04 Python
如何让python的运行速度得到提升
Jul 08 Python
解决pytorch下出现multi-target not supported at的一种可能原因
Feb 06 Python
在Python上基于Markov链生成伪随机文本的教程
Apr 17 #Python
基于scrapy实现的简单蜘蛛采集程序
Apr 17 #Python
在Python的Django框架中实现Hacker News的一些功能
Apr 17 #Python
由Python运算π的值深入Python中科学计算的实现
Apr 17 #Python
在Python中实现贪婪排名算法的教程
Apr 17 #Python
在Linux下调试Python代码的各种方法
Apr 17 #Python
Python脚本在Appium库上对移动应用实现自动化测试
Apr 17 #Python
You might like
WHOIS类的修改版
2006/10/09 PHP
dede3.1分页文字采集过滤规则详说(图文教程)
2007/04/03 PHP
PHP程序61条面向对象分析设计的经验小结
2008/11/12 PHP
php cli模式学习(PHP命令行模式)
2013/06/03 PHP
利用php递归实现无限分类 格式化数组的详解
2013/06/08 PHP
ThinkPHP中的关联模型注意点
2014/06/16 PHP
javascript+php实现根据用户时区显示当地时间的方法
2015/03/11 PHP
微信自定义菜单的创建/查询/取消php示例代码
2016/08/05 PHP
PHP基于imagick扩展实现合成图片的两种方法【附imagick扩展下载】
2017/11/14 PHP
PHP使用phpunit进行单元测试示例
2019/09/23 PHP
Javascript select控件操作大全(新增、修改、删除、选中、清空、判断存在等)
2008/12/19 Javascript
js实现固定显示区域内自动缩放图片的方法
2015/07/18 Javascript
网页收藏夹显示ICO图标(代码少)
2015/08/04 Javascript
详解JavaScript对象序列化
2016/01/19 Javascript
javascript字符串对象常用api函数小结(连接,替换,分割,转换等)
2016/09/20 Javascript
jQuery实现最简单实用的分秒倒计时
2017/02/05 Javascript
JavaScript Drum Kit 指南(纯 JS 模拟敲鼓效果)
2017/07/23 Javascript
详解微信JS-SDK选择图片遇到的坑
2018/08/15 Javascript
[19:15]DK战队纪录片
2014/09/02 DOTA
[01:22:28]DOTA2-DPC中国联赛 正赛 SAG vs RNG BO3 第一场 1月18日
2021/03/11 DOTA
Python re模块介绍
2014/11/30 Python
python中 chr unichr ord函数的实例详解
2017/08/06 Python
Python遍历pandas数据方法总结
2018/02/09 Python
Golang GBK转UTF-8的例子
2019/08/26 Python
Django+uni-app实现数据通信中的请求跨域的示例代码
2019/10/12 Python
利用Python小工具实现3秒钟将视频转换为音频
2019/10/29 Python
python中加背景音乐如何操作
2020/07/19 Python
印度服装购物网站:Limeroad
2018/09/26 全球购物
副厂长岗位职责
2014/02/02 职场文书
财政专业求职信范文
2014/02/19 职场文书
《散步》教学反思
2014/03/02 职场文书
教师节促销方案
2014/03/22 职场文书
环卫工人慰问信
2015/02/15 职场文书
幼儿园2016年圣诞活动总结
2016/03/31 职场文书
导游词之西湖雷峰塔
2019/09/18 职场文书
二维码条形码生成的JavaScript脚本库
2022/07/07 Javascript