使用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中urllib+urllib2+cookielib模块编写爬虫实战
Jan 20 Python
python dict.get()和dict['key']的区别详解
Jun 30 Python
pytorch 把MNIST数据集转换成图片和txt的方法
May 20 Python
Python实现数据可视化看如何监控你的爬虫状态【推荐】
Aug 10 Python
使用Python的SymPy库解决数学运算问题的方法
Mar 27 Python
python multiprocessing多进程变量共享与加锁的实现
Oct 02 Python
python实现身份证实名认证的方法实例
Nov 08 Python
Python大数据之从网页上爬取数据的方法详解
Nov 16 Python
将python安装信息加入注册表的示例
Nov 20 Python
解决jupyter运行pyqt代码内核重启的问题
Apr 16 Python
python绘制趋势图的示例
Sep 17 Python
pytorch 中nn.Dropout的使用说明
May 20 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
英雄试炼之肉山谷—引领RPG新潮流
2020/04/20 DOTA
PHP 常见郁闷问题答解
2006/11/25 PHP
记录PHP错误日志 display_errors与log_errors的区别
2012/10/09 PHP
初识Laravel
2014/10/30 PHP
Laravel解决nesting level错误和隐藏index.php的问题
2019/10/12 PHP
详解no input file specified 三种解决方法
2019/11/29 PHP
javascript 火狐(firefox)不显示本地图片问题解决
2008/07/05 Javascript
用jquery实现下拉菜单效果的代码
2010/07/25 Javascript
如何实现textarea里的不同文本显示不同颜色
2014/01/20 Javascript
JavaScript字符串对象fromCharCode方法入门实例(用于把Unicode值转换为字符串)
2014/10/17 Javascript
jQuery控制网页打印指定区域的方法
2015/04/07 Javascript
Vue.js 点击按钮显示/隐藏内容的实例代码
2018/02/08 Javascript
VUE v-for循环中每个item节点动态绑定不同函数的实例
2018/09/26 Javascript
jQuery 获取除某指定对象外的其他对象 ( :not() 与.not())
2018/10/10 jQuery
解决pycharm双击但是无法打开的情况
2020/10/31 Javascript
[04:07]显微镜下的DOTA2第八期——英雄复活动作
2014/06/24 DOTA
Python代理抓取并验证使用多线程实现
2013/05/03 Python
Python中lambda的用法及其与def的区别解析
2014/07/28 Python
讲解Python中for循环下的索引变量的作用域
2015/04/15 Python
使用PDB简单调试Python程序简明指南
2015/04/25 Python
python实现二分查找算法
2017/09/21 Python
python中requests库session对象的妙用详解
2017/10/30 Python
Python print不能立即打印的解决方式
2020/02/19 Python
Django静态资源部署404问题解决方案
2020/05/11 Python
python模块如何查看
2020/06/16 Python
python 用Matplotlib作图中有多个Y轴
2020/11/28 Python
HTML5+CSS3实例 :canvas 模拟实现电子彩票刮刮乐代码
2016/12/30 HTML / CSS
大学生新闻专业个人自我评价
2013/11/12 职场文书
服务员岗位责任制
2014/02/11 职场文书
自行车广告词大全
2014/03/21 职场文书
一岗双责责任书
2014/04/15 职场文书
借条如何写
2015/05/26 职场文书
感动中国何玥观后感
2015/06/02 职场文书
护士岗前培训心得体会
2016/01/08 职场文书
MYSQL主从数据库同步备份配置的方法
2021/05/26 MySQL
mysql sock文件存储了什么信息
2022/07/15 MySQL