使用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获取外网IP并发邮件的实现方法
Oct 01 Python
python正则表达式面试题解答
Apr 28 Python
python实现画圆功能
Jan 25 Python
TensorFlow实现卷积神经网络
May 24 Python
Python实现获取汉字偏旁部首的方法示例【测试可用】
Dec 18 Python
python3人脸识别的两种方法
Apr 25 Python
PyQt5根据控件Id获取控件对象的方法
Jun 25 Python
python Web flask 视图内容和模板实现代码
Aug 23 Python
Django shell调试models输出的SQL语句方法
Aug 29 Python
浅谈pytorch torch.backends.cudnn设置作用
Feb 20 Python
浅谈python 类方法/静态方法
Sep 18 Python
python爬虫scrapy框架之增量式爬虫的示例代码
Feb 26 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
php算开始时间到过期时间的相隔的天数
2011/01/12 PHP
ThinkPHP之A方法实例讲解
2014/06/20 PHP
Javascript 通过json自动生成Dom的代码
2010/04/01 Javascript
Javascript笔记一 js以及json基础使用说明
2010/05/22 Javascript
jquery做的一个简单的屏幕锁定提示框
2014/03/26 Javascript
jquery移动节点实例
2015/01/14 Javascript
js字符串操作方法实例分析
2015/05/06 Javascript
JavaScript检测字符串中是否含有html标签实现方法
2015/07/01 Javascript
js实现浮动在网页右侧的简洁QQ在线客服代码
2015/09/04 Javascript
AngularJs动态加载模块和依赖注入详解
2016/01/11 Javascript
jQuery实现验证年龄简单思路
2016/02/24 Javascript
js实现的下拉框二级联动效果
2016/04/30 Javascript
使用AJAX实现Web页面进度条的实例分享
2016/05/06 Javascript
基于Javascript实现文件实时加载进度的方法
2016/10/12 Javascript
微信小程序 配置文件详细介绍
2016/12/14 Javascript
jQuery实现淡入淡出的模态框
2017/02/09 Javascript
深入理解vue路由的使用
2017/03/24 Javascript
JS实现标签页切换效果
2017/05/04 Javascript
微信小程序之绑定点击事件实例详解
2017/07/07 Javascript
Vue.js 的移动端组件库mint-ui实现无限滚动加载更多的方法
2017/12/23 Javascript
解决vue-cli webpack打包开启Gzip 报错问题
2019/07/24 Javascript
JS 图片压缩原理与实现方法详解
2020/04/29 Javascript
jQuery 添加元素和删除元素的方法
2020/07/15 jQuery
jquery简易手风琴插件的封装
2020/10/13 jQuery
python实现校园网自动登录的示例讲解
2018/04/22 Python
Python3安装pip工具的详细步骤
2019/10/14 Python
wxpython+pymysql实现用户登陆功能
2019/11/19 Python
世界最大域名注册商:GoDaddy
2016/07/24 全球购物
英国第一独立滑雪板商店:The Snowboard Asylum
2020/01/16 全球购物
大学生毕业自我评价范文分享
2013/11/07 职场文书
财务会计实习报告体会
2013/12/20 职场文书
九年级化学教学反思
2014/01/28 职场文书
经典商业广告词
2014/03/13 职场文书
食品安全工作实施方案
2014/03/26 职场文书
税务干部个人整改措施思想汇报
2014/10/10 职场文书
2014年招商工作总结
2014/11/22 职场文书